Xcode9.3(Objective-C)上传App至App Store时PayUmoney iOS SDK多问题求助
Hey there, I’ve dealt with similar framework architecture and App Store upload headaches before, so let me walk you through how to resolve these PayUmoney SDK problems step by step:
The Root Cause
All those ITMS errors (90087, 90209, 90125) and warning (90080) boil down to two key issues:
- The PayUmoney SDK frameworks (
PayUmoneyCoreSDK.framework,CitrusGraphics.framework,PlugNPlay.framework) include simulator-only architectures (x86_64/i386), which Apple rejects for App Store submissions. - The frameworks aren’t properly configured for Position Independent Executables (PIE) or correct segment alignment, which violates App Store binary requirements.
Removing them from Embedded Binaries lets you upload, but obviously breaks the app at runtime because the libraries are missing. Re-integrating the SDK as-is just brings back the same problems since the core framework issues aren’t fixed.
Step-by-Step Solutions
1. Strip Simulator Architectures from Frameworks
First, we need to remove the unsupported x86_64 and i386 architectures from each framework. You can do this manually via Terminal:
- Navigate to the directory of each framework in your project:
cd /path/to/your/project/Frameworks/PayUmoneyCoreSDK.framework - Run the
lipocommand to strip the unwanted architectures:lipo -remove x86_64 -remove i386 PayUmoneyCoreSDK -o PayUmoneyCoreSDK - Repeat this exact command for
CitrusGraphics.frameworkandPlugNPlay.framework(replace the framework name in the command accordingly).
To verify the fix, run:
lipo -info PayUmoneyCoreSDK.framework/PayUmoneyCoreSDK
You should only see ARM architectures (armv7, arm64) listed.
2. Enable Position Independent Executable (PIE)
Fix the ITMS-90080 warning by ensuring PIE is enabled for your project:
- In Xcode, go to your project’s Build Settings.
- Search for
Position Independent Executableand set its value to YES.
3. Re-Embed Frameworks Correctly
Don’t remove the frameworks from Embedded Binaries—instead, make sure they’re set up properly:
- Go to your project’s General tab.
- Under Embedded Binaries, re-add the three PayUmoney frameworks.
- Ensure each framework’s embedding option is set to Embed & Sign (this ensures Xcode handles proper signing and architecture stripping during build).
4. Add a Run Script to Automate Architecture Stripping (Optional but Recommended)
To avoid manually stripping architectures every time you update the SDK, add a Run Script Phase to your project:
- In Xcode, go to your target’s Build Phases tab.
- Click the + button and select New Run Script Phase.
- Drag this new phase before the
Embed Frameworksphase. - Paste the following script into the script field:
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}" # Strip unused architectures from embedded frameworks find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK do FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable) FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME" echo "Processing framework: $FRAMEWORK_EXECUTABLE_PATH" EXTRACTED_ARCHS=() for ARCH in $ARCHS do echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME" lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH" EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH") done echo "Merging extracted architectures" lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}" rm "${EXTRACTED_ARCHS[@]}" echo "Replacing original executable with merged version" rm "$FRAMEWORK_EXECUTABLE_PATH" mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH" done
This script automatically strips any unused architectures during the build process, ensuring your app only includes the ARM architectures needed for App Store submission.
5. Fix ITMS-90125 Encryption Error
For the encryption info error:
- In your project’s Build Settings, search for
Enable Encryptionand set it to NO (unless your app explicitly uses encryption that requires export compliance—most apps don’t need this enabled). - If the issue persists, confirm that the PayUmoney frameworks are built with Apple’s linker (this is something PayUmoney’s team should fix, but the above steps should mitigate it for submission).
Final Checks
- Test your app on a physical iOS device to ensure it doesn’t crash (this confirms the frameworks are properly embedded and accessible).
- Create an archive and upload it to App Store Connect—you should no longer see the ITMS errors/warnings.
Also, follow up with PayUmoney’s support team and share these details: their updated SDK includes unsupported simulator architectures and lacks proper PIE configuration, which breaks App Store submissions. Since the old SDK worked, their new build process likely has a regression that needs fixing.
内容的提问来源于stack exchange,提问作者Vinayak Bhor

