
Why customize the designated requirement? The reasons are probably too varied for me to imagine, but one common scenario that happens to affect me is one in which two different bundle IDs may effectively refer to the same “app.” For example instances of MarsEdit may possess either the “” or “” identifiers, depending upon whether they were built for the Mac App Store or for direct sale. In short: unless an app is signed with the same certificate and has the same bundle ID as it had when it stored the data, it will not be allowed to access the data now. Typically, the default asserts that the bundle identifier and certificate signing chain used when signing the app are later the same.
#Red sweater marsedit code
We need our apps to meet their own designated requirements.įor most apps this is a no-brainer: just let the code signing system provide a default designated requirement. So an app that starts out not even meeting its own designated requirement is invalid from the start. If your app doesn’t meet that test, the system assumes you no longer have any business accessing the data that you previously placed in the keychain. The reason for the failure is that the “designated requirement” serves as a test of identity for your app. Worse, even if the user approves the access with “Always Allow,” the system will continue to prompt the user each and every time it tries to access the data.

Even data placed in the keychain by the app itself will be denied to the app unless the user approves of the access. How bad? The most likely to affect your users if the app uses the system keychain at all to store secure data.


The code is still signed by you, it just doesn’t identify itself to the code signing system in such a way that it will be considered trusted by the system as being “itself.” This is bad. This problem is pretty insidious, because the failure of an app to meet its designated requirement does not actually prevent you distributing it and having users run it. Your.app: does not satisfy its designated Requirement
#Red sweater marsedit verification
If you do any fine-tuned customization to your app’s code signing “designated requirement,” you may come across situations where the code appears to be signed correctly, but codesign verification nonetheless yields a cryptic, terse failure message:
