Unable to upload a Connect IQ companion app to the App Store

Former Member
Former Member
Hello,

I'm finished developing my first companion app for iPhone for my Connect IQ apps. Currently Android companion apps exists and work nice with the CIQ watchapps.

The iPhone app also works on my testing device, but when I try to upload it to the App Store I bump into these obstacles:

1. The XCode compiler complains that the ConnectIQ.framework was not compiled with bitcode. I can turn off the "Compile with bitcode" option for my app in XCode and then the archive cab be build, but then...

2. When I try to upload the app on the App Store, I get a bunch of errors:
ERROR ITMS-90087: "Unsupported Architectures. The executable for SpeedDialGarmin.app/Frameworks/ConnectIQ.framework contains unsupported architectures '[x86_64, i386]'."

ERROR ITMS-90209: "Invalid Segment Alignment. The app binary at 'SpeedDialGarmin.app/Frameworks/ConnectIQ.framework/ConnectIQ' does not have proper segment alignment. Try rebuilding the app with the latest Xcode version."


ERROR ITMS-90125: "The binary is invalid. The encryption info in the LC_ENCRYPTION_INFO load command is either missing or invalid, or the binary is already encrypted. This binary does not seem to have been built with Apple's linker."


WARNING ITMS-90080: "The executable 'Payload/SpeedDialGarmin.app/Frameworks/ConnectIQ.framework' is not a Position Independent Executable. Please ensure that your build settings are configured to create PIE executables. For more information refer to Technical Q&A QA1788 - Building a Position Independent Executable in the iOS Developer Library."



Garmin's documentation of Connect IQ for iOS says:

The framework contains simulator slices that must be stripped out before uploading to iTunes Connect. If the simulator slices are not removed then your app will be rejected by iTunes Connect. The stripSimulatorSlice.sh script is included in the SDK to help with this process.


However, the stripSimulator.sh script is nowhere to be found in the SDK. Where is it exactly?

What do I need to do in order to create a binary that can be accepted by the Apple App Store?

Thank you for your help!


P.S. The full error message from XCode, from point 1 is:

ld: bitcode bundle could not be generated because '/Users/Eir/Documents/workspace/SpeedDialGarmin/SpeedDialGarmin/SpeedDialGarmin/ConnectIQ.framework/ConnectIQ' was built without full bitcode. All frameworks and dylibs for bitcode must be generated from Xcode Archive or Install build for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
  • We're going to get an update out that includes the stripSimulatorSlice.sh script (apologies for the omission!). In the meantime, I'll get the script forwarded directly to you so you can see whether that addresses the issue.
  • Former Member
    Former Member over 8 years ago
    Hi Brandon,

    thanks for your reply! My email address is eir3apps at Gmail dot com. I wasn't able to find the script, please mail it to me (or tell me where is it exactly) and I'll try to run it before making the build, as described in the docs. Hope that it will fix everything.

    Regards.
  • Former Member
    Former Member over 8 years ago
    The solution

    Despite Brandon's promises, I received no script via email.

    However, I did manage to get the build accepted in the App Store! I followed the instructions for Pebble's iOS SDK. Here there are:


    • Install Carthage or make sure it is up to date
    • On your application target “Build Phases” settings tab, click the “+” icon and choose “New Run Script Phase”. Create a Run Script with the following contents: /usr/local/bin/carthage copy-frameworks
    • and add the paths to the framework under “Input Files”, e.g.: $(SRCROOT)/path/to/ConnectIQ.framework



    In addition, one needs to turn off the Bitcode setting in the Build Settings.

    That's it.