Fix IPv6 App Store Rejection and Architecture Errors for iOS Apps
This guide explains why an iOS app may be rejected for IPv6 incompatibility, how to set up a local IPv6 test environment with two iPhones and a Mac, troubleshoot network bugs, update the Reachability library, and strip unsupported architectures from frameworks to resolve App Store upload errors.
1. App Store IPv6 Rejection
When submitting the app to the App Store, it was rejected because the login page did not respond on an iPhone running iOS 10.2 connected to an IPv6 network.
2. Understanding IPv6
IPv6 (Internet Protocol Version 6) is the next‑generation IP protocol designed by the IETF to replace IPv4. It provides a larger address space; in China IPv6 is mainly used by the education network and is not yet supported by the three major carriers.
3. Setting Up an IPv6 Test Environment
Steps:
Prepare two iPhones and a Mac.
Connect one iPhone to the Mac via USB, enable the Mac’s 4G hotspot, and share the connection over USB.
Open System Preferences on the Mac, hold the Option key and click the network icon to reveal hidden settings.
Enable Internet Sharing; the Mac’s status bar will show the shared connection.
Connect the second iPhone to the shared network.
After configuration the iPhone shows an IPv6 address, confirming the test environment is active.
4. Testing and Debugging IPv6 Issues
Initial tests showed the app could log in, but network monitoring was unreliable. Updating all third‑party pods did not solve the problem. The Reachability library version needed to be updated to a version that supports IPv6 (download from Apple’s developer site).
5. Solving App Store Upload Errors
The upload produced several ITMS errors (UnsupportedArchitectures, Invalid SegmentAlignment, encryption info missing, not a Position Independent Executable). The cause was that the framework contained simulator architectures [x86_64, i386]. Switching the SDK to the release version fixed the issue.
For custom SDKs you can add a Run Script phase that strips unused architectures from embedded frameworks:
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
# Loop through embedded frameworks and remove unused architectures
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 "Executable is $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: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
doneAfter updating the Reachability library and running the script, the app passes the IPv6 test and uploads without errors.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
