FAQ & Troubleshooting
Frequently Asked Questions
Q1: Xcode logs show objc[...]: ... is implemented in both ... and .... One of the two will be used. Which one is undefined.

This is a byproduct of Argmax Pro SDK's open-core architecture where aliased definitions (across Open-source SDK and Pro SDK) are confusing Xcode. These logs are expected and harmless. This warning will be addressed in an upcoming release with improved packaging.
In more recent versions of libobjc, the wording of this message has changed to: (still expected and harmless)
`objc[...]: ... implemented in both ... and .... This may cause spurious casting failures and mysterious crashes. One of the duplicates must be removed or renamed.
Q2: Updating SwiftPM in Xcode leads to invalid registry source archive checksum

Argmax validates the authenticity and integrity of each package asset with checksums. This error is observed only when a user's Xcode is open at the exact time when Argmax publishes a new SDK version to the private SwiftPM registry.
The root cause is that Xcode compares the new package against the previous package's checksum. We have already merged a fix for the issue in the open source Swift Package Manager project and are working with Apple to resolve the issue in Xcode.
In the interim, there are two options for workarounds.
Option 1:
Change the default fingerprint checking policy to warn instead of strict with the following commands depending on your build system:
Xcode User Default:
defaults write com.apple.dt.Xcode IDEPackageFingerprintPolicy -string warnXcodebuild Flag:
xcodebuild -resolvePackageDependencies -packageFingerprintPolicy warnSwiftPM CLI Flag:
swift package resolve --resolver-fingerprint-checking warnOption 2:
Delete the caches for the provenance/signing fingerprint, and clear your app cache by replacing YourApp with the name of your app.
Run the following commands:
trash ~/Library/Developer/Xcode/DerivedData/YourApp*
trash ~/Library/Caches/org.swift.swiftpm
trash ~/.swiftpm/security/fingerprints/argmaxinc.argmax-sdk-swift.jsonIf you are using the alpha channel (i.e., you are getting the package from argmaxinc.argmax-sdk-swift-alpha), please run these commands:
trash ~/Library/Developer/Xcode/DerivedData/YourApp*
trash ~/Library/Caches/org.swift.swiftpm
trash ~/.swiftpm/security/fingerprints/argmaxinc.argmax-sdk-swift-alpha.jsonFor Xcode projects: go to File > Packages > Reset Package Caches.
For SwiftPM CLI packages (with a Package.swift in the root directory), run:
swift package purge-cache
swift package reset
trash ~/Library/Caches/org.swift.swiftpm We are continuously working to improve our SDK delivery experience. In the meantime, if this problem persists after clearing the caches as instructed above, please reach out to Argmax via your dedicated Slack channel.
Q3: Which architectures does the Argmax SDK support?
The Argmax SDK supports macos-arm64 , ios-arm64 and ios-arm64_x86_64-simulator. If the application integrating the SDK is expected to run on other architectures, we recommend using a pre-processor directive to check for arm64, e.g.
#if arch(arm64)
import Argmax
// Initialize SDK
#endifQ4: Pro SDK initialization fails with Error: generic ("Loading this model is not allowed.")
Your Argmax Pro SDK licensing may have end-user device or SDK configuration constraints including:
- minimum operating system version
- supported devices
- specific app bundle IDs (that you reported when signing the Argmax Pro SDK License Agreement)
- specific model versions (Argmax runs checksum integrity tests on each loaded model)
Some common reasons for this error:
- You are using a different version of your app whose bundle ID was not registered with Argmax.
- You modified the model files post-download (e.g. put a README inside the model files directory) which leads to a failed checksum integrity test.
If you run into this error in a context where you believe your license should not be restricted, please reach out to Argmax via your dedicated Slack channel.
Q5: How do I set up Argmax Pro SDK in ephemeral CI runners?
Argmax Pro SDK is distributed through a private SwiftPM registry as described here. You set up the registry only once and it is persisted on your machine via Keychain.
Many teams leverage ephemeral CI runners to build their projects where the private registry needs to be set up before each build job. In these cases, we recommend using the following snippet in your environment setup:
swift package-registry set --global --scope argmaxinc https://api.argmaxinc.com/v1/sdk
swift package-registry login https://api.argmaxinc.com/v1/sdk/login --token ARGMAX_SECRET_TOKEN --netrc --no-confirm
xcodebuild -resolvePackageDependencies -packageAuthorizationProvider netrc -derivedDataPath /Volumes/workspace/DerivedDatawhere ARGMAX_SECRET_TOKEN is registered as a secret or environment variable in your CI infrastructure.
If you use an .xcworkspace that integrates multiple projects, please add -workspace to the xcodebuild command from above.
Q6: I get Unsupported Swift architecture when building my app because of Argmax
It is highly likely that your app supports a platform that Argmax does not: x86_64 (Intel Macs). Please see Q3 for the solution.
Q7: Why does my macOS app keep asking for Keychain access between builds?
Argmax uses the keychain to store offline license information for a particular device. Keychain access decisions are tied to the signing identity that created the item. Using the same bundle ids across builds signed with different identities (for example development vs production) can lead to repeated prompts that require the login password to access the Argmax license keychain entries. Use distinct bundle ids per build configuration (like com.company.myapp.dev vs com.company.myapp), and consistent signing, notarizing, and stapling to prevent this issue. Note that this is generally isolated to devices that are used for both development and release testing.
Q8: I am testing Argmax using the iOS Simulator but seeing unexpectedly low accuracy and speed. Why?
Argmax leverages the Neural Engine and running your app using the Simulator leads to major speed and accuracy discrepancies compared to real device results. We recommend using real devices to test and benchmark after Argmax is fully integrated while potentially relying on the Simulator during the earlier stages of Argmax integration.
Q9: How do I list SDK versions and view the CHANGELOG?
You may list all published versions of argmax-sdk-swift and argmax-sdk-swift-alpha with the following command in Terminal:
curl https://api.argmaxinc.com/v1/sdk/argmaxinc/argmax-sdk-swift{-alpha} -H "Authorization: Bearer SECRET_API_TOKEN" | jqThe CHANGELOG is accessible when you are logged in under this page. It is also viewable in Xcode as part of the SDK.