I have an app that only crashes once it's been notarised. I read a few posts that essentially said before trying to identify issues by reviewing the crash report I should ensure signing and notarisation has happened correctly.
I've worked through the document "Resolving common notarization issues"
spctl -vvv --assess --type exec: gives no errors and correctly returns my developer id.
codesign -dvv: returns a timestamp
My app uses a hardened runtime.
My app shows up in Xcode as a macOS Archive (e.g not a Generic Xcode Archive)
Here is the crash report.
Translated Report (Full Report Below)
Process: Scene Finder [44479]
Path: /Users/USER/Downloads/Scene Finder.app/Contents/MacOS/Scene Finder
Identifier:
Version: 0.9 (20250206.1)
Code Type: ARM-64 (Native)
Parent Process: launchd [1]
User ID: 501
Date/Time: 2025-02-11 13:09:03.7786 +1000
OS Version: macOS 15.3 (24D60)
Report Version: 12
Anonymous UUID: EE8B1269-0A8A-3AB6-516B-C752E8A18B5A
Sleep/Wake UUID: 436CD7CF-7B13-4A9C-9425-7EF94CC007A9
Time Awake Since Boot: 98000 seconds
Time Since Wake: 9524 seconds
System Integrity Protection: enabled
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: Namespace SIGNAL, Code 6 Abort trap: 6
Terminating Process: Scene Finder [44479]
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
Hi all,
I'm developing a simple Finder Sync Extension, using Xcode 16.3.
When running in Debug with Xcode, everything works fine.
Instead, when compiling in Release and launching the containing app (by double-clicking on it), the Extension is not recognized (neither loaded) by the system.
The only difference between Debug and Release stands in Signing configuration:
Debug:
Release:
As you can see, in Release I'm using a Provisiong Profile, configured with my company's Developer ID.
I'm wondering if Capabilities and Entitlements are not what is needed by my app. Anyway, I have no idea what the issue is.
Any suggestion will be appreciated.
Thank you in advance
_Alex
Topic:
Code Signing
SubTopic:
Certificates, Identifiers & Profiles
Tags:
Extensions
Xcode
Debugging
Developer ID
I've been distributing my Math Education app (Java-based) as a downloadable .dmg. My sw manufacturing process was working well on my Intel-iMac a year ago (signing, notarization, stapling).
I need to support Apple Silicon, so I replicated the SW manuf. stack on my M2 MacBook, including putting my Developer and Installer Certificates in the Keychain Access. I get through building the M2,M2,M4 .dmg installer file just fine.
But the Codesign is failing. It should be prompting me for my MacOS password (it does this in the Intel-Mac process), but fails this command:
codesign --sign "Pierre Bierre (SL7L4YU8GT)" --force --options runtime --verbose --timestamp ~/DFG2D_MacOS_Manufacturing/MacOSInstallers/DFG2D_Mac_J17010_295
The response was:
error: The specified item could not be found in the keychain.
The signer reference is correct, and works fine on the Intel-Mac codesign process.
What could explain why the same script fails in the M2 environment? Does codesign normally prompt for the MacOS user password ? Why would that fail?
Topic:
Code Signing
SubTopic:
Certificates, Identifiers & Profiles
I am responsible for the mobile app and thus also of the apple developer and app store connect accounts of a company.
An external freelancer developed a software package for us which we aim to offer for installation and use on macOS systems of our customers; distributed exclusively outside of the Apple App Store. The software package has nothing to do with the mobile app. MacOS' Gatekeeper currently warns or even prevents our customers regarding the installation of the package on their device; pretty much as described here: https://developer.apple.com/developer-id/.
According to a previous talk with Apple's Support, the software package (.app) the Freelancer developed must be signed with one of our own certificates. As we cannot grant selective app store connect access to third persons (only for the concerned certificates), we prefer to not provide access to our entire apple developer account to the freelancer, for the sole reason of the certificate & signing process. According to previous attempts with Apples' support regarding the most feasible solution in this case, they recommended me to manage the signing of the package of the freelancer, and simply request the package from the freelancer.
I've thus generated an according Developer ID Certificate, but regarding the signing process, I'm confused. I know how signing works with mobile apps in XCode, but regarding software that is not distributed throughout the App Store on macOS, I'm unsure about the process. Also, as far as I know, the entitlements of the application are involved in the signing process. So my concern is that simply having the software package (.app) from the freelancer is not really enough to complete the signing + notarization process? Won't I need further information about the app's entitlements etc.?
I would like to have a clear solution about the procedure that is required in these cases, as online documentations and / or forums as well as previous talks with your non-technical support from Apple did not resolve the issue.
Hello,
I'm currently trying to upload a new version of an existing application. But each time I try to validate the archive of the application, I got the following error in Xcode (v16.2) :
Invalid code signing entitlements. Your application bundle’s signature contains code signing entitlements that aren’t supported on macOS. Specifically, the “37CG5MY799.com.example.app” value for the com.apple.application-identifier key in “com.example.app.pkg/Payload/app.app/Contents/MacOS/app” isn’t supported. This value should be a string that starts with your Team ID, followed by a dot (“.”), followed by the bundle ID.
I suspect that there is a problem with the App ID Prefix (that is 37CG5MY799 for the app) when our team ID is E4R7RJ7LA3 but I cannot find a solution.
I asked the Apple Developer Support for help and I have read the documentation they sent but it couldn't solve this problem so they redirected me to the forums.
https://developer.apple.com/library/archive/qa/qa1879/_index.html
https://developer.apple.com/library/archive/technotes/tn2318/_index.html#//apple_ref/doc/uid/DTS40013777-CH1-OVERVIEW
https://developer.apple.com/library/archive/technotes/tn2318/_index.html#//apple_ref/doc/uid/DTS40013777-CH1-TNTAG33
There isn't any obvious App ID Prefix mismatch in the entitlement between the Application's signature entitlement and the Embedded provisioning profile entitlement .
Application's signature entitlement :
<dict>
<key>com.apple.application-identifier</key>
<string>37CG5MY799.com.example.app</string>
<key>com.apple.developer.team-identifier</key>
<string>E4R7RJ7LA3</string>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.example.app</string>
</array>
<key>com.apple.security.files.user-selected.read-only</key>
<true/>
</dict>
Embedded provisioning profile entitlement :
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.example.app</string>
<string>E4R7RJ7LA3.*</string>
</array>
<key>com.apple.application-identifier</key>
<string>37CG5MY799.com.example.app</string>
<key>keychain-access-groups</key>
<array>
<string>37CG5MY799.*</string>
</array>
<key>com.apple.developer.team-identifier</key>
<string>E4R7RJ7LA3</string>
</dict>
The app also have a browser extension that correctly use the Team ID.
How to solve this problem ?
Thanks for your time,
Qeg
I submitted a Mac application for a safari ad blocker extension about 15 hours ago and it's still in progress. Is it normal for notarization to take this long? It's my first time submitting something for notarization so maybe that's why it's taking longer than expected?
ID: 8BDB3D5E-3A42-469F-9479-AC76229C6BB5
Topic:
Code Signing
SubTopic:
Notarization
The Developer App Certificate is not trusted.
Topic:
Code Signing
SubTopic:
General
Good afternoon,
Our team is currently developing a mobile application that includes video call functionality, and we are seeking the optimal approach to enable incoming calls on iOS devices.
Ideally, we would like calls to be delivered even when the app is completely closed or after the device is restarted. As I understand it, this may require obtaining VoIP permissions; otherwise, calls may only work when the app is open or running in the background.
I would appreciate it if you could confirm my understanding and advise me on the steps or requirements for obtaining the appropriate permissions.
Currently, when I try to launch the app in XCode, I see an error (screenshot).
我们开发了一款SDK,并用自签名证书对SDK进行了签名,我们的证书会在2025年1月30日到期,到期后对已发布至appstore的app会有影响吗?
用户在2025年1月31日打开app时,会因为自签名证书到期而闪退吗?有不少app集成了我们的SDK,这个问题对我们来说非常紧急和重要,麻烦尽快回复,谢谢!
以下是我们的签名步骤:
自签名步骤:self-signed certificate xcframework
1、钥匙串创建:证书助理-创建证书-自签名根证书+代码签名
2、自行签名根证书修改信任设置
3、对已经打包好的xcframework进行签名
(官方命令示例)codesign --timestamp -v --sign "证书名字" ~/Desktop/MySDK.xcframework
Topic:
Code Signing
SubTopic:
Certificates, Identifiers & Profiles
Hi,
I recently got a consistent delay from notary tool. I have viewed all your suggestions and understand that it "occasionally" will have further review and take longer time, but then it will be faster.
However, in my case, my app although is accepted many times. It is still significantly delay.
It is a native macOS app called ConniePad. Whenever I submit, it took me 2 days or more to finish notarise, which significantly affect my business. Could you please have a look on it.
For log detail about the time, and the ids:
--------------------------------------------------
createdDate: 2025-04-05T22:54:45.815Z
id: 998b5aa8-fc9c-4469-98fe-950d815e734e
name: ConniePad.app.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-04-05T21:32:22.679Z
id: c7b1ab49-6f46-4998-8d06-2ffe8a180c8f
name: ConniePad.app.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-04-03T08:39:52.594Z
id: aa33d9d0-9d2f-4296-8fc3-d7e0b404596b
name: ConniePad.app.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-04-03T01:23:31.077Z
id: b0333d78-497d-491c-b36c-bdfb64520296
name: ConniePad.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-04-03T01:17:20.925Z
id: 83aa12f2-f1bb-457f-940a-4c2281cf8a5f
name: ConniePad.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-04-03T01:12:52.932Z
id: 0a921069-fb37-469a-bfb0-6be82e9320ba
name: ConniePad.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-04-03T01:03:30.584Z
id: a607fe3c-d10f-43d6-a184-e97df7b632fd
name: ConniePad.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-04-03T00:52:47.322Z
id: c42d0ca0-db8a-4431-b5b4-646ccfcad003
name: ConniePad.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-04-03T00:28:18.626Z
id: 7ef8777f-7add-4440-abb5-3c0b19cf92d4
name: ConniePad.app.zip
status: Invalid
--------------------------------------------------
createdDate: 2025-04-03T00:24:37.320Z
id: 36bb1285-0aeb-4c48-b23c-fac737a3d93f
name: ConniePad.app.zip
status: Invalid
--------------------------------------------------
createdDate: 2025-04-02T23:59:27.940Z
id: bb4578a5-a67b-49e8-afd0-a9d707c10091
name: ConniePad.app.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-04-02T08:51:38.295Z
id: 93ff89f4-98d3-45ac-9ee8-9483726a9666
name: ConniePad.app.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-04-02T08:19:13.762Z
id: 9e4a62df-3d8a-4cfa-ae9e-56ff35ffe137
name: ConniePad-ConverterTool.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-04-02T04:15:34.508Z
id: 7ee43b74-f73f-462a-bb3d-f6bc53b1cb80
name: ConniePad-ConverterTool.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-04-02T02:11:53.312Z
id: d675e8f6-dc30-48e9-9269-9bc376f1b29e
name: ConniePad-ConverterTool.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-04-02T01:30:32.768Z
id: 9901f125-4355-4812-936b-97578ac2de2f
name: ConniePad-ConverterTool.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-04-01T20:47:26.035Z
id: a79265bc-8ad3-4a4b-ae39-150801aa9da9
name: ConniePad.app.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-03-18T22:39:54.189Z
id: b808b676-a41c-4536-b4fd-4b567701adcb
name: ConniePad.app.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-03-18T05:21:23.607Z
id: 797f5d4f-cd94-4511-9217-11e57c2c7ac3
name: ConniePad.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-03-18T05:18:30.707Z
id: c5b5c260-fb7f-4bda-9548-f5b7e57cb2f3
name: ConniePad.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-03-17T06:45:37.831Z
id: f24c1017-9171-4796-bf97-ea47ef83f7ce
name: ConniePad.app.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-03-17T06:38:17.981Z
id: 8dd0ea7e-e810-48f9-a48f-62dcc1406284
name: ConniePad.app.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-03-17T06:33:27.649Z
id: 704e339a-4d99-4e5e-8414-deb8b26c57ac
name: ConniePad.app.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-03-17T06:32:06.925Z
id: 8e9b09b6-e061-4361-abc1-0bbd8f33b599
name: ConniePad.app.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-03-17T06:26:52.444Z
id: 2b564641-eb87-4de9-a59c-ff5362b8bf4a
name: ConniePad.app.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-03-17T06:22:04.790Z
id: 1aa158bd-0afd-4c60-8e2f-3029388710ab
name: ConniePad.app.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-03-17T06:17:17.141Z
id: 3bffcf1d-2fd7-41ba-b70c-f85837499736
name: ConniePad.app.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-03-17T02:38:47.102Z
id: 2dd2fb47-7dff-4f30-b2e0-d8c2bfcf10f5
name: ConniePad.app.zip
status: Accepted
--------------------------------------------------
createdDate: 2025-03-14T03:23:54.671Z
id: 5cafb2a9-03e3-468e-b918-ff24b17fceee
name: ConniePad.app.zip
status: Accepted
I'm currently befuddled by the entire signing and certificate process. I don't understand what I need, what the team admin needs to do, or how to go about doing it so that I can build the project.
We've managed to have this working in the past but I guess the system has changed somewhat. Here's what we have going:
A Unity project which hasn't changed from a few years ago. I build the project in unity, open the Xcode project and this:
There's an issue with the Signing and Capabilities.
If I choose automatic setup it shows an error saying that it requires a development team. I had the account admin add my Apple ID to the team so I'm not sure why that's an issue still. Do I need to pay the 99$ to be able to building Xcode?
If I try to do it manually I select the provisioning profile that the account admin sent me and it auto selects the team associated with the provisioning profile I guess but then there's no singing certificate. The error says:
There is no signing certificate "iOS Development" found. No "iOS Development" signing certificate matching team ID "V7D5YBZRMV" with a private key was found.
So, if someone could explain to me like I'm 5 the entire signing and certificate process is and let me know what we're doing wrong with the team/provisioning profile/certificate setup I would be very much appreciative.
Hi All.
I'm having a notarization issue trying to get a product built.
Starting around the beginning of April, I have a notarization process failing every time with an invalid server certificate. The returned error is:
Error: HTTPError(statusCode: nil, error: Error Domain=NSURLErrorDomain Code=-1202 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “notary-artifacts-prod.s3.amazonaws.com” which could put your confidential information at risk." UserInfo={NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorDomainKey=3, NSErrorPeerCertificateChainKey=(
"<cert(0x107810200) s: *.s3.amazonaws.com i: Amazon RSA 2048 M01>",
"<cert(0x107810c00) s: Amazon RSA 2048 M01 i: Amazon Root CA 1>",
"<cert(0x107811400) s: Amazon Root CA 1 i: Starfield Services Root Certificate Authority - G2>",
"<cert(0x107811c00) s: Starfield Services Root Certificate Authority - G2 i: Starfield Class 2 Certification Authority>"
The problem certificate appears to be "Amazon RSA 2048 M01" which appears to be expired.
The error fires in response to an 'xcrun notarytool log' command. The initial ' xcrun notarytool submit' has already worked.
The build server in this case is running Jenkins, with a Makefile driven notarization stage. It all worked perfectly until a build on April 3rd, all builds have failed since.
I have tried using '--no-s3-acceleration'. But that fails even faster with:
Conducting pre-submission checks for ICFA.zip and initiating connection to the Apple notary service...
Submission ID received
id: d50a2157-7acb-4bd6-b1d1-6d0b1d52d5c9
Error: The operation couldn’t be completed. (Network.NWError error 2.)
Any help or suggestions would be appreciated. Right now I have folks needing a valid build.
Thanks in advance.
Topic:
Code Signing
SubTopic:
Notarization
Hi Apple Developer Community,
I'm experiencing an issue with Family Controls entitlements for my iOS app that I'd like to discuss and see if others have encountered similar problems.
Background:
My app (BrightStart) uses Family Controls to help users build healthy morning routines by temporarily blocking distracting apps until they complete a sunlight exposure session. The core functionality relies on automatic time-based blocking (e.g., block social media apps from 6-8am daily).
The Problem:
I have Family Controls working perfectly in development builds, but I'm blocked from distributing via TestFlight due to entitlement issues with my Device Activity Monitor extension.
Technical Details:
Main app bundle ID: app.brightstart.app
✅ Has both "Family Controls (Development)" and "Family Controls (Distribution)" options available
Extension bundle ID: app.brightstart.app.BrightStartMonitorExtension
❌ Only shows "Family Controls (Development)" - no Distribution option
Error when archiving for TestFlight:
❌ Provisioning profile failed qualification
Profile doesn't support Family Controls (Development).
Family Controls (Development) feature is for development only.
Please use Family Controls (Distribution) for distribution.
Impact:
Cannot upload to TestFlight for beta testing
Native FamilyActivityPicker falls back to mock UI in distributed builds
Automatic scheduled app blocking (via DeviceActivityMonitor) doesn't function in production
Questions for the community:
Has anyone successfully gotten "Family Controls (Distribution)" enabled for a Device Activity Monitor extension?
Is this a known limitation, or should I expect this option to be available?
Are there alternative approaches for time-based automatic app blocking that work in distribution builds?
Should I contact Apple Support directly about enabling this entitlement for the extension?
Btw, Cursor wrote this summary above, so it could be just hallucinating the issue? Would really appreciate anyone's thoughts here.
I have a .NET 6 application that runs in the background. The installer is a .pkg file built using a third-party tool called "Packages".
All .dylib and executable files are codesigned before packaging. The resulting .pkg file is notarized.
The app uses these entitlements:
com.apple.security.cs.allow-jit
com.apple.security.cs.allow-unsigned-executable-memory
com.apple.security.cs.allow-dyld-environment-variables
com.apple.security.cs.disable-library-validation
The app is built on a macbook Air 2015 running macOS 12.6 and it works without issues on that machine.
On a macbook Pro M3 running macOS 14.6.1 the app fails to run even though the installation itself is successful.
The only logs that I was able to find are related to syspolicyd (4 warnings):
Unable to apply protection to app: 45, PST: (vuid: A78FF6C2-08D5-4DCC-B946-8836251AA0E7), (objid: 1873967), (team: (null)), (id: (null)), (bundle_id: (null))
Failed to register app bundle for protection: 45, PST: (vuid: A78FF6C2-08D5-4DCC-B946-8836251AA0E7), (objid: 1873967), (team: (null)), (id: (null)), (bundle_id: (null))
scan failed, finishing evaluation : PST: (vuid: A78FF6C2-08D5-4DCC-B946-8836251AA0E7), (objid: 1873967), (team: (null)), (id: (null)), (bundle_id: (null))
Terminating process due to Gatekeeper rejection: 95158,
Unfortunately, verification commands such as
sudo codesign --verify --deep --strict -vvv MyApplication.App
spctl -a -vvv -t install MyApplicationInstaller.pkg
do not indicate any issues.
Are there any additional steps that need to be performed in order for my app to work properly on newer machines?
I'm trying to help out one of our vendors by building a skeleton PCI dext which they can flesh out.
However, I can't seem to get the signing right.
I can't sign it at all using no team or my personal team. "Signing for requires a development team", and "Personal development teams ... do not support the System Extension capability".
I can't sign the driver because "DriverKit Team Provisioning Profile: doesn't match the entitlements file's value for the com.apple.developer.driverkit.transport.pci entitlement.
I think this problem occurs because our company has already been assigned a transport.pci entitlement, but for our own PCI vendor ID. But I want to build and test software that works with our vendor's PCI device.
I tried generating a profile for the driver manually, it contained only our own company's PCI driver match:
IOPCIPrimaryMatch = "0x0000MMMM&0x0000FFFF";
where MMMM is our own PCI vendor ID.
Is there a better way to inspect the profile Xcode is using than the postage-stamped sized info popup which truncates the information? I would download the generated profile but it doesn't appear on the profile, but Xcode is accessing it from somewhere.
When I look at the available capabilities I can add to an app identifier on the Developer portal, I see com.apple.developer.driverkit.transport.usb, which is "development only". There's no "development only" capability for PCI. Does this mean it isn't possible to develop even a proof-of-concept PCI driver without being first granted the DriverKit PCI (Primary Match) entitlement?
When adding capabilities to a driver, the list of available capabilities shown in Xcode has one "DriverKit PCI (Primary Match) entry", but if I double click it, two such entries appear in the Signing and Capabilities tab for my driver target. On the Developer portal, when I look at my driver's Identifier, there are two Capabilities labelled DriverKit PCI (Primary Match). Why?
When building to macOS on GameMaker, I get the error "this identity cannot be used for signing code" when using the Developer ID Installer certificate. The certificate was neither expired nor revoked, but nonetheless I created new certificates to start fresh but am still getting that error. I don't get issues building to iOS via GameMaker, just to macOS.
If it makes any difference, I only noticed this issue started happening after I converted my Apple Developer Program account from an individual account to an organizational account, although it was weeks to months before I built to macOS via GameMaker before then, so I don't know if it correlates with that.
Topic:
Code Signing
SubTopic:
Certificates, Identifiers & Profiles
Hello,
I have a macOS app built with Flutter’s macOS target (native Xcode project). The app is unsigned (no Developer ID code signing / notarization). The .app bundle looks valid:
CFBundlePackageType = APPL
Unique CFBundleIdentifier
No LSUIElement or LSBackgroundOnly
Executable exists and is runnable
Placed at /Applications/MyApp.app (top-level), runs fine from Finder
However, it does not show up in Launchpad.
What I tried:
Remove quarantine:
xattr -dr com.apple.quarantine "/Applications/MyApp.app"
Force Launch Services registration:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f "/Applications/MyApp.app"
Rebuild LS caches:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user
Reset Launchpad DB and restart Dock:
defaults write com.apple.dock ResetLaunchPad -bool true && killall Dock
Verified bundle structure/type:
mdls -name kMDItemContentType -name kMDItemKind "/Applications/MyApp.app" → shows com.apple.application-bundle / Application
Questions
Is code signing/notarization required for an app to appear in Launchpad (even if it runs from Finder)?
What additional conditions cause Launchpad to skip an otherwise valid, unsigned .app in /Applications?
Are there deeper Launch Services or Dock database checks I can run to diagnose why this specific app is excluded?
Hi, I have a .NET MAUI app which I've added subscriptions to using the Plugin.InAppBilling nuget package. When I tested on TestFlight I got an almost immediate crash. After doing some research I followed advice to add an Entitlements.plist file to Platforms > iOS with the following entry:
com.apple.developer.in-app-purchase
The distribution provisioning profile I'm using to sign my app has the App ID set to an Identifier which has "In-App Purchase" ticked, but greyed out in it's "Capabilities" section on https://developer.apple.com/. I'm not sure why it's ticked and greyed out, but I assume that means that "In-App Purchase" is enabled.
The app runs file locally but when I create an IPA file and add it to Transporter for upload to App Store Connect I get the following error:
"Validation failed (409)
Invalid Code Signing Entitlements. Your application bundle's signature contains code signing entitlements that are not supported on iOS. Specifically, key 'com.apple.developer.in-app-purchase' in 'Payload/[Removed].app/[Removed]' is not supported. (ID: [Removed])".
Here is the structure of my csproj code for creating a IPA file for iOS:
The command I use:
dotnet publish [Removed]/app.csproj -f:net9.0-ios -c:Release ^
/p:PlatformTarget=Arm64 ^
/p:RuntimeIdentifier=ios-arm64 ^
/p:ServerAddress=[Removed] ^
/p:ServerUser=[Removed] ^
/p:ServerPassword=[Removed] ^
/p:ArchiveOnBuild=true ^
/p:BuildIpa=true
I'm stuck trying to figure this out. If you could please point out any issues with what I'm doing or if you have any suggestions to resolve the problem I would very much appreciate it.
Thanks,
Ben
I’ve developed a macOS app, but I’ve had trouble using a script to fully codesign it and package it into a .dmg file. I was only able to complete codesigning using the third-party app itself—not via command-line scripts.
Is it possible to write a script that automates the entire process of codesigning the app?
To provide the best user experience for those downloading the app outside of the Mac App Store, is it correct to first package it as a .app and then wrap that into a .dmg file for distribution?
Currently, the app is available on the web as a .dmg. When downloaded, it appears in a folder and can be double-clicked to launch. However, macOS displays a warning that it was downloaded from the internet. Can I use a script to remove that quarantine warning?
If possible, I’d appreciate a step-by-step explanation and a sample command-line script to:
Codesign the app properly
Package it into a signed .dmg
Remove the quarantine attribute for local testing or distribution
Is the reason I was only able to codesign it inside the third-party app due to how that app was built, or can this always be done from the command line?
Topic:
Code Signing
SubTopic:
General
This is a lengthy one. I have basically compiled a Rust binary into a dylib and packaged into a .xcframework that contains per arch .frameworks. This loads correctly when run from Xcode into a real iOS device. However, when deployed to TestFlight the app crashes.
Here is what is a bit different, the dylib is not fully self-contained. It tries to reach in an use C functions I have exposed in my library code. Calling functions that are just within the dylib and just return works fine, but the moment it tries to call one of the exposed functions it crashes.
A full in-depth step by step of how I packaged the binaries can be found in my website: https://ospfranco.com/complete-guide-to-dylibs-in-ios-and-android
When I look at the TestFlight crash report there are no symbols but the termination cause via WatchDog is:
Termination Reason: CODESIGNING 2 Invalid Page
I have declared my functions as such:
OBJC_EXTERN void ios_prepare_request(const char *url)
#define EXPORT __attribute__((visibility("default"), used, retain))
extern "C" {
EXPORT void ios_prepare_request(const char *url) {
NSString *urlString = [NSString stringWithUTF8String:url];
request =
[NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
}
}
// Function used to prevent optimization
void force_symbol_registration() {
// Force these symbols to be included in the binary by referencing them
volatile void *ptrs[] = {(void *)ios_prepare_request,};
// Prevent compiler from optimizing away the array
(void)ptrs;
}
And I load my framework as:
opacity::force_symbol_registration();
// NSBundle *dylib_bundle =
// [NSBundle bundleWithIdentifier:@"com.opacitylabs.sdk"];
// NSString *dylib_path = [dylib_bundle pathForResource:@"sdk" ofType:@""];
// // Load the dynamic library
// void *handle = dlopen([dylib_path UTF8String], RTLD_NOW | RTLD_GLOBAL);
// if (!handle) {
// NSString *errorMessage = [NSString stringWithUTF8String:dlerror()];
// *error =
// [NSError errorWithDomain:@"OpacitySDKDylibError"
// code:1002
// userInfo:@{NSLocalizedDescriptionKey :
// errorMessage}];
// return -1; // or appropriate error code
// }
// Make sure the main executable's symbols are available
dlopen(NULL, RTLD_NOW | RTLD_GLOBAL);
NSBundle *frameworkBundle =
[NSBundle bundleWithIdentifier:@"com.opacitylabs.sdk"];
if (![frameworkBundle isLoaded]) {
BOOL success = [frameworkBundle load];
if (!success) {
NSString *errorMessage = @"Failed to load framework";
*error =
[NSError errorWithDomain:@"OpacitySDKDylibError"
code:1002
userInfo:@{NSLocalizedDescriptionKey : errorMessage}];
return -1;
}
}
As you can see, I have also tried dlopen both work when run from Xcode but crash when deployed on testflight.
I have tried re-signing the xcframework/frameworks on a pre build step but it doesn't work
As stated, I can call the functions inside the dylib, but once they try to call my exposed code it crashes
Is this achievable at all or just a limitation of the iOS sandbox?