I am developing a macOS app that requires the Associated Domains entitlement. The app will be distributed as a custom app.
The app needs to be signed using Team A’s Developer ID Application certificate and packaged under Team A’s Team ID.
Team A has a secure signing and packaging setup, but they do not provide access to their Developer ID Application Identity (cert) or their provisioning profile.
I am part of Team B and have access to Team B’s Developer ID Application identity and provisioning profiles.
I am thinking of doing the following:
I create a provisioning profile under Team B that authorizes the Associated Domains entitlement.
I sign the app using Team B’s Developer ID Application identity, ensuring the required entitlements are included.
Then, I re-sign the app using Team A’s Developer ID Application identity, since Team A has also set up the same bundle ID with the Associated Domains entitlement and corresponding provisioning profile.
Questions:
Is this approach correct & does it have any drawback?
Will the double signing process work without issues, given that Team A has the required provisioning profile for the same bundle ID?
Are there better ways to handle this situation where signing must be done under Team A but access is limited?
Thanks!
Demystify code signing and its importance in app development. Get help troubleshooting code signing issues and ensure your app is properly signed for distribution.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
From time to time I see folks run into error 65 when stapling a ticket to their notarised Mac software. This post explains the two common causes of that error.
If you have questions or comments, start a new thread here on the forums. Put it in the Code Signing > Notarization topic area so that I see it.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"
Resolving Error 65 When Stapling
If you directly distribute Mac software, you must sign and notarise your product so that it passes Gatekeeper. For information on how to do this, see:
Notarizing macOS software before distribution, if you use Xcode
Creating distribution-signed code for macOS, Packaging Mac software for distribution, and Customizing the notarization workflow otherwise
The last step of that process is to staple a ticket to your notarised product. This can fail with error 65. There are two common causes of that failure:
No appropriate ticket
Trust issues
The following sections explain how to recognise and resolve these issues.
Note You are not absolutely required to staple your product. See The Pros and Cons of Stapling for more on that topic.
No Appropriate Ticket
Consider the following stapling error:
% stapler staple "TestError65.dmg"
Processing: /Users/quinn/Desktop/TestError65 2025-03-03 22-12-47/TestError65.dmg
CloudKit query for TestError65.dmg (2/d812985247c75e94fd603f026991f96144a031af) failed due to "Record not found".
Could not find base64 encoded ticket in response for 2/d812985247c75e94fd603f026991f96144a031af
The staple and validate action failed! Error 65.
Note the Record not found message. This indicates that the stapling operation failed because there’s no appropriate ticket.
To investigate this, look at the notary log:
% notarytool-log b53042b6-4cbb-4cef-ade4-dae034a69947
{
…
"status": "Accepted",
…
"sha256": "f012735a6d53b17082c088627da4249c9988111d17e7a90c49aa64ebc6bae22e",
"ticketContents": [
{
"path": "TestError65.dmg/TestError65.app",
"digestAlgorithm": "SHA-256",
"cdhash": "abc27b0f2daee77b9316de3c6844fbd9e234621c",
"arch": "x86_64"
},
{
"path": "TestError65.dmg/TestError65.app",
"digestAlgorithm": "SHA-256",
"cdhash": "9627c72e53d44ae77513613e2ce33314bd5ef41e",
"arch": "arm64"
},
{
"path": "TestError65.dmg/TestError65.app/Contents/MacOS/TestError65",
"digestAlgorithm": "SHA-256",
"cdhash": "abc27b0f2daee77b9316de3c6844fbd9e234621c",
"arch": "x86_64"
},
{
"path": "TestError65.dmg/TestError65.app/Contents/MacOS/TestError65",
"digestAlgorithm": "SHA-256",
"cdhash": "9627c72e53d44ae77513613e2ce33314bd5ef41e",
"arch": "arm64"
},
{
"path": "TestError65.dmg",
"digestAlgorithm": "SHA-256",
"cdhash": "01a553c91ee389764971767f5082ab8c7dcece02"
}
],
"issues": null
}
First, make sure that the status field is Accepted. If there’s some other value, the notary service didn’t generate a ticket at all! To understand why, look at the rest of the notary log for errors and warnings.
Assuming that your notarisation request was successful, look through the log for cdhash values. These represent the contents of the ticket generated by the notary service. Compare that list to the cdhash values of the code being signed:
% hdiutil attach "TestError65.dmg"
…
… /Volumes/Install TestError65
% codesign -d -vvv --arch arm64 "/Volumes/Install TestError65/TestError65.app"
…
CDHash=9627c72e53d44ae77513613e2ce33314bd5ef41e
…
% codesign -d -vvv --arch x86_64 "/Volumes/Install TestError65/TestError65.app"
…
CDHash=abc27b0f2daee77b9316de3c6844fbd9e234621c
…
Those are all present in the ticket. However, consider the cdhash of the disk image itself:
% codesign -d -vvv "TestError65.dmg"
…
CDHash=d812985247c75e94fd603f026991f96144a031af
…
That’s the cdhash that stapler is looking for:
CloudKit query for TestError65.dmg (2/d812985247c75e94fd603f026991f96144a031af) failed due to "Record not found".
But it’s not present in the notarised ticket.
Note The term cdhash stands for code directory hash. If you’re curious what that’s about, see TN3126 Inside Code Signing: Hashes and the Notarisation Fundamentals DevForums post.
What happened here is:
I built the app.
I signed it with my Developer ID code-signing identity.
I created a disk image from that app.
I signed that with my Developer ID code-signing identity.
I notarised that.
I then re-signed the disk image. This changes the cdhash in the code signature.
Now the disk image’s cdhash doesn’t match the cdhash in the ticket, so stapling fails.
To resolve this problem, make sure you’re stapling exactly the file that you submitted to the notary service. One good option is to compare the SHA-256 hash of the file you’re working on with the sha256 field in the notary log.
Trust Issues
Now consider this stapling error:
% stapler staple "TestError65.dmg"
Processing: /Users/quinn/TestError65.dmg
Could not validate ticket for /Users/quinn/TestError65.dmg
The staple and validate action failed! Error 65.
Note how it’s different from the previous one. Rather than saying that the ticket was not found, it says Could not validate ticket. So, stapler found the ticket for the file and then tried to validate it before doing the staple operation. That validation failed, and thus this error.
The most common cause of this problem is folks messing around with trust settings. Consider this:
% security dump-trust-settings
SecTrustSettingsCopyCertificates: No Trust Settings were found.
% security dump-trust-settings -d
SecTrustSettingsCopyCertificates: No Trust Settings were found.
Contrast it with this:
% security dump-trust-settings
SecTrustSettingsCopyCertificates: No Trust Settings were found.
% security dump-trust-settings -d
Number of trusted certs = 1
Cert 0: Apple Root CA - G3
Number of trust settings : 10
…
Someone has tweaked the trust settings for the Apple Root CA - G3 anchor. In fact, I used Keychain Access to mark the certificate as Always Trust. You’d think that’d avoid problems, but you’d be wrong. Our code signing machinery expects Apple’s anchor and intermediate certificates to have the default trust settings.
IMPORTANT Some trust settings overrides are fine. For example, on my main work Mac there are trust settings overrides for Apple internal anchors. This problem occurs when there are trust settings overrides for Apple’s standard anchor and intermediate certificates.
To fix this:
In Terminal, run the dump-trust-settings commands shown above and build a list of Apple certificates with trust settings overrides.
In Keychain Access, find the first problematic certificate in your list.
Note that there may be multiple instances of the certificate in different keychains. If that’s the case, follow these steps for each copy of the certificate.
Double click the certificate to open it in a window.
If the Trust section is collapsed, expand it.
Ensure that all the popups are set to their default values (Use System Defaults for the first, “no value specified” for the rest).
If they are, close the window and move on to step 8.
If not, set the popups to the default values and close the window. Closing the window may require authentication to save the trust settings.
Repeat steps until 2 through 7 for each of the problematic certificates you found in step 1.
When you’re done, run the dump-trust-settings commands again to confirm that your changes took effect.
After upgrading the iOS system to 18.3.1, the APP crashed continuously when it was launched. The following log was seen in the device log:
Bootstrapping failed for <FBApplicationProcess: 0x72ad16b80; app<com.xxxx.yyyy>:> with error: <NSError: 0x300cd4d80; domain: RBSRequestErrorDomain; code: 5; "Launch failed."> {
NSUnderlyingError = <NSError: 0x300cd4ab0; domain: NSPOSIXErrorDomain; code: 85> {
NSLocalizedDescription = Launchd job spawn failed;
};
}
Our APP is in-house distribution
What are the possible causes? How can I solve it?
Hello everyone,
I'm encountering significant delays with the notarization process for our Electron application using a newly created developer account. The process is taking an unusually long time (1-2 days), which is disrupting our workflow.
Details:
We've attempted notarization multiple times over the past 2 weeks.
The process consistently takes 8+ hours before I typically abort it. (due going offline etc)
Interestingly, when I check the notary history later, it shows the notarization was actually successful.
Our application package is relatively large, which might be contributing to the delay (archive: 226 mb, app:800mb)
Recent Examples:
Current submission (still in progress): 52db12c3-4a54-4e14-9d77-e141d7f28227
Previous successful submission: 49273be6-3e13-4f3f-83a4-945114d899b9
Has anyone else experienced similar issues with notarizing applications? Are there any optimizations or best practices I should implement to reduce these processing times? I'm using the default notarization feature that comes with electron forge.
Any suggestions or insights would be greatly appreciated!
Hey all,
I'm experiencing an error, when trying to upload my app to the App Store using Transporter. I build my app with fvm flutter build ipa --release. When I try to upload this, I get the following error:
I have already done a rebuild and checked my Provision Profile and certificate
Hello,
I’m facing an issue with enabling In-App Purchases (IAP) for my iOS app, and it’s causing provisioning errors during the build process.
Issue:
• In Apple Developer Portal → Certificates, Identifiers & Profiles, the In-App Purchase capability is checked but grayed out, so I can’t modify it.
• In Xcode, under Signing & Capabilities, I don’t see In-App Purchase listed.
• When trying to build, I get the following error:
Provisioning profile “BillionMines_Dev_Profile” doesn’t include the com.apple.developer.in-app-purchase entitlement.
• Automatic signing in Xcode fails with:
Xcode failed to provision this target.
What I Have Tried:
1. Verified that my App ID is explicitly defined (not a wildcard ID).
2. Regenerated and downloaded a new Provisioning Profile, ensuring it matches my app.
3. Confirmed that In-App Purchase is enabled in App Store Connect under Features.
4. Cleaned the build folder and restarted Xcode.
5. Manually added com.apple.developer.in-app-purchase to my .entitlements file.
Questions:
• Why is the In-App Purchase option grayed out in Certificates, Identifiers & Profiles?
• How can I ensure my provisioning profile includes the com.apple.developer.in-app-purchase entitlement?
• Are there additional steps required to fully activate In-App Purchases?
Any help would be greatly appreciated!
Thanks in advance.
Topic:
Code Signing
SubTopic:
Certificates, Identifiers & Profiles
Tags:
Bundle ID
In-App Purchase
Provisioning Profiles
The mentioned way of setting up complications does not work. We can't create the identifier according to the guideline mentioned in the WWDC session.
https://developer.apple.com/videos/play/wwdc2020/10049/?time=1021
Timestamp: 17:04
Error:
An attribute in the provided entity has invalid value
An App ID with Identifier '.watchkitapp.complication' is not available.
Please enter a different string.
To clarify - the non masked identifier is not used on another property inside our dev program.
Without creating the identifier our tests result in not working push notifications.
Error message while testing: discarded as application was not registered.
Is the way mentioned in the WWDC session still valid?
BR
Topic:
Code Signing
SubTopic:
Certificates, Identifiers & Profiles
Tags:
Bundle ID
Watch Complications
Hello,
We use automatic signing and Fastlane on our CI. Fastlane uses xcodebuild to create an archive.
xcodebuild -workspace ourApp.xcworkspace -scheme app-dev -destination generic/platform=iOS -archivePath app-dev.xcarchive -skipPackagePluginValidation -allowProvisioningUpdates -authenticationKeyID OurAppStoreConnectAuthKey -authenticationKeyIssuerID OurAppStoreConnectAuthKeyIssuerId -authenticationKeyPath /path/to/OurAppStoreConnectKey.p8 clean archive
All works fine, but ....
Why does Xcode 16 log out logged Apple ID and create a new every build? As a result, we have more and more Unknown Apple IDs in Xcode, and for each of them an error appears in log.
Error:
xcodebuild[3174:1804334] DVTDeveloperAccountManager: Failed to load credentials for 0A1DF15C-ETC-ETC: Error Domain=DVTDeveloperAccountCredentialsError Code=0 "Invalid credentials in keychain for 0A1DF15C-ETC-ETC, missing Xcode-Username" UserInfo={NSLocalizedDescription=Invalid credentials in keychain for 0A1DF15C-ETC-ETC, missing Xcode-Username}
Of course, the originally logged-in Apple ID has an error corresponding to his non-logged-in state.
xcodebuild[3174:1804334] DVTDeveloperAccountManager: Failed to load credentials for originally_logged-in_user: Error Domain=DVTDeveloperAccountCredentialsError Code=0 "Invalid credentials in keychain for originally_logged-in_user, missing Xcode-Token" UserInfo={NSLocalizedDescription=Invalid credentials in keychain for originally_logged-in_user, missing Xcode-Token}
Why does this happen and how can it be fixed? Why does Xcode 16 log out its logged Apple ID?
I am subscribed to an individual developer license.
https://developer.apple.com/documentation/xcode/configuring-network-extensions
"Network Extension" does not appear in the Capability section in Xcode. Below is my Xcode screenshot.
We are developing an application for MAC machine using .NET. After developing and signing the package in notarization process was failed with the error in the attached file.
Then we have created the simple Xamarin.MAC to check whether able to notarize it . But with the simple project also we have faced the same error.
Provide us the solution to fix these issues
We have tried to codesiginin the app to resolve the notarization error, but while code signing the below error was thrown
"unable to build chain to self-signed root for signer "Developer ID Application" (not mentioning the certificate id)
SFSecure.app: errSecInternalComponent"
Notarization-error
Topic:
Code Signing
SubTopic:
Notarization
Hi everyone!
I've send my .dmg file for notarization, it has been accepted on March 5. Since then there weren't any updates, it hasn't changed its status. What might be the problem?
Info about submission:
createdDate: 2025-03-05T12:13:18.802Z
id: 202d877d-d0c4-4211-bba4-6ebdb169a843
status: Accepted
We are developing an application using .NET Xamarin.mac. While notarization after signing the package the error was thrown which was attached in a file
Then created an simple Xamarin.mac app , in notarization process the same error was thrown.
Provide an solution to resolve the issue while notarization.
We have tried to codesignin the .app file but below error was thrown
unable to build chain to self-signed root for signer "Developer ID Application:
SFSecure.app: errSecInternalComponent
Notarization error
Topic:
Code Signing
SubTopic:
Notarization
Hi,
I have an account that is only a few days old. My first notary went smooth and was done within minutes. Every subsequent notary has been stuck pending. The oldest one being a day or so.
Hello, our app is non-sandboxed app, but we do want to support widget extension and safari extension. Those extensions require sandboxing. Is it possible to do this without sandboxing our app? Thank you!
Hi,
I have a macOS Intel machine running Ventura 13.7.4. This machine is used as a build node for Jenkins to run a test for a USB device that has an HID interface. The test runner for this is Java's junit on Azul's Zulu JDK 8 for mac. I've added the com.apple.security.device entitlement to this JDK 8 bundle and signed using a self-signed certificate. This certificate is available in the system keychain at:
keychain: "/Library/Keychains/System.keychain"
version: 256
class: 0x80001000
On my personal account on this machine, I can run the test and it calls IOHIDDevicePlugin's open function and returns success:
[junit] [debug] [hid.cpp:1457] HIDAccess::Open Success in open for cDeviceHandle: 0x6000006abb38
If I run the same test logged in as the Jenkins agent account, then open returns:
[junit] [debug] [hid.cpp:1484] Could not open HID with handle: 0x600002a5c018, error (-1ffffd3f): (iokit/common) privilege violation
I can see the certificate that signed the JDK bundle running the command:
security find-certificate -c "java-rt-usb" -a -m
The results are the same for both accounts. Is my setup expected to work? I.e. create a self-signed cert in one account with admin privileges, put the cert in the system keychain, sign an app bundle with a new usb entitlement using this cert, and then run that app in another account on the same machine. If it's expected to work, are there any more troubleshooting tools I can use?
ioreg shows the same output for these devices under test in both accounts:
$ ioreg -p IOUSB -w0
+-o CMSIS-DAP@14620000 <class AppleUSBDevice, id 0x1000026ae, registered, matched, active, busy 0 (1 ms), retain 17>
+-o CMSIS-DAP@14630000 <class AppleUSBDevice, id 0x1000026d6, registered, matched, active, busy 0 (1 ms), retain 17>
Topic:
Code Signing
SubTopic:
Certificates, Identifiers & Profiles
Hi,
I'm having a really hard time figuring out why I cannot perform cloud signing via Developer ID with xcodebuild.
I have a macOS application, which I can perfectly cloud sign the following way:
Sign into Xcode with my Admin + Account Holder Apple ID.
Delete my Developer ID Application certificate from Keychain Access.
In Xcode, click Archive.
When archived, click "Distribute App" in Xcode Organizer.
The app is cloud signed. I prove this by extracting the certificate codesign --extract-certificates -- /path/to/app.app then locate the 1.2.840.113635.100.6.1.32 bit mentioned by Quinn in this post. I however do it by simply opening the certifiacte with Keychain Access, where I can investigate the content of the certificate, rather than use that tool he does.
Then, I do the following to attempt to cloud sign via xcodebuild:
Create an API Key for the whole team in Users and Access > Integrations > App Store Connect with the "Admin" role selected.
Download the private key .p8 file to ~/Downloads.
Sign out of my Apple ID in Xcode by removing the account in Settings > Accounts.
Create an archive:
xcodebuild archive -scheme "<redacted scheme name>" -archivePath ~/Downloads/archive.xcarchive -authenticationKeyIssuerID <redacted issuer id> -authenticationKeyID <redacted key id> -authenticationKeyPath ~/Downloads/AuthKey_<redacted key id>.p8 -allowProvisioningUpdates
The archive is successfully created, with a new "Apple Development: Created via API (TEAM ID)" naming.
Export the archive:
xcodebuild -exportArchive -archivePath ~/Downloads/archive.xcarchive -authenticationKeyIssuerID <redacted issuer id> -authenticationKeyID <redacted key id> -authenticationKeyPath ~/Downloads/AuthKey_<redacted key id>.p8 -allowProvisioningUpdates -exportOptionsPlist ~/Downloads/exportOptions.plist -exportPath ~/Downloads
which then fails:
2025-03-07 10:27:58.706 xcodebuild[2152:40704] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path "/var/folders/tn/yy7ynz3d0yb4p3sd_5q_wl0h0000gn/T/<redacted app name> macOS_2025-03-07_10-27-58.706.xcdistributionlogs".
error: exportArchive Cloud signing permission error
error: exportArchive No signing certificate "Developer ID Application" found
** EXPORT FAILED **
Opening the distribution logs, I find this in the Provisioning Log:
2025-03-07 09:09:58 +0000 2025-03-07 09:09:58 +0000 IDEProvisioningRepair(<redacted app name>.app): 2025-03-07 09:09:58 +0000 IDEProvisioningRepair(<redacted app name>.app): Sending request 84E57539-BC1D-407A-8402-7BCE9F2FD100 to <https://appstoreconnect.apple.com/xcbuild/v1/certificates> for session DVTServicesTeamBasedSession <issuer: <redacted issuer id>; key identifier: <redacted key id>>.
Method: POST
Headers:
{
Accept = "application/vnd.api+json";
"Accept-Encoding" = "gzip, deflate";
Authorization = "Bearer <redacted bearer token>";
"Content-Length" = 116;
"Content-Type" = "application/vnd.api+json";
"User-Agent" = Xcode;
"X-HTTP-Method-Override" = GET;
"X-Xcode-Version" = "16.2 (16C5032a)";
}
Payload:
{"urlEncodedQueryParams":"teamId=<redacted team id>&filter%5BcertificateType%5D=DEVELOPER_ID_APPLICATION_MANAGED&limit=200"}
2025-03-07 09:09:59 +0000 2025-03-07 09:09:59 +0000 IDEProvisioningRepair(<redacted app name>.app): 2025-03-07 09:09:59 +0000 IDEProvisioningRepair(<redacted app name>.app): Received response for 84E57539-BC1D-407A-8402-7BCE9F2FD100 @ <https://appstoreconnect.apple.com/xcbuild/v1/certificates>. Code = 0
2025-03-07 09:09:59 +0000 2025-03-07 09:09:59 +0000 IDEProvisioningRepair(<redacted app name>.app): 2025-03-07 09:09:59 +0000 IDEProvisioningRepair(<redacted app name>.app): Response payload: {
"errors" : [ {
"id" : "3d09690a-e26f-497f-b576-25104064387e",
"status" : "403",
"code" : "FORBIDDEN_ERROR",
"title" : "This request is forbidden for security reasons",
"resultCode" : 7495,
"detail" : "You haven't been given access to cloud-managed distribution certificates. Please contact your team's Account Holder or an Admin to give you access. If you need further assistance, contact Apple Developer Program Support at https://developer.apple.com/contact/."
} ]
}
Which is really weird, since I am using an API key with Admin rights. If I create a new key, and use it only for this command, App Store Connect does show the "Last Used" date as today after running the command.
I thought some time might need to pass, but the issue has been persisting since yesterday.
What could be wrong here? I do have a managed Developer ID Application certificate showing in my account but I still can't retrieve it with an Admin right imbued API key.
Topic:
Code Signing
SubTopic:
Certificates, Identifiers & Profiles
Tags:
Signing Certificates
Xcode Cloud
Developer ID
I am trying to resign a package using a script from Docebo.
But I got an error when running the script
error: The specified item could not be found in the keychain.
So I ran security find-identity and I got a 0 Valid identity message.
But I can see these certificates installed in my keychain and downloaded a brand new mobile provissioning profile.
No dice...
any ideas?
Topic:
Code Signing
SubTopic:
Certificates, Identifiers & Profiles
I have a misterous problem with checking DMG notarization.
It fails:
bash-3.2$ spctl -a -t open --context context:primary-signature -v MyApp.dmg
MyApp: rejected
source=no usable signature
However this DMG installs fine on Big Sur 11.2.2, macOS allows to run this app, and checking of notarization for installed app was passed:
bash-3.2$ spctl -a -v '/Applications/MyApp.app'
/Applications/MyApp.app: accepted
source=Notarized Developer ID
I checked other downloaded apps (Intel or Universal). Some DMG files pass DMG notarization (for example, Audacity), and some fails (PerfectTablePlan). Why?
For my app (Universal) I use the following code to codesign and notarize:
codesign --timestamp --options runtime --force --deep -s "Developer ID Application: MYCOMPANY" "My.app"
// Creating DMG with EULA license
xcrun altool --notarize-app --primary-bundle-id MyApp -u "my@email.com" -p "abc123" --file MyApp.dmg
xcrun stapler staple MyApp.dmg
I'm developing an app using Electron Builder for a potential port to Windows in the future. I've had a heck of a time getting credentials to work and felt like I was in some sort of time loop doing the same things over and over again to no avail. I finally was able to sign my app, sign the .dmg and start the notarization process. That was last night and it still says "In Progress". If anyone is able to push it through, that would be awesome! (id: 2520e724-7069-408a-9ea4-60b23e8435a7)
I saw another thread on here where people stated it was taking forever, I'm not sure if this is just because its my first time, but I was hoping to get a beta out to testers this weekend. I just need a version that doesn't get flagged as "Malware" by Gatekeeper. This is just for a standalone macOS application, not the App Store.
Is there a reason that this process takes an absurd amount of time? Will it always be like this or is this just a fluke and it was a bad time to try?
Doing it multiple times (even hours apart) doesn't help.
createdDate: 2025-03-14T13:58:40.397Z
id: eb49f8a4-bee6-432b-87de-6b11ca9d392a
name: panda-app-1.0.0-arm64.dmg
status: In Progress
--------------------------------------------------
createdDate: 2025-03-14T13:23:31.444Z
id: f6f3c938-5356-434c-aba1-c425f18cb4a7
name: panda-app-1.0.0-arm64.dmg
status: In Progress
Topic:
Code Signing
SubTopic:
Notarization