Xcode 6 iOS Creating a Cocoa Touch Framework - Architectures issues

后端 未结 10 1851
眼角桃花
眼角桃花 2020-11-27 09:54

I\'m trying to make a dynamic framework for an iOS app. Thanks to the new version of Xcode (6) we can select a Cocoa Touch Framework when we create a new project and there i

10条回答
  •  独厮守ぢ
    2020-11-27 10:24

    This question was posted awhile ago(Xcode 6) but I encountered the same problem recently with Xcode 10.

    So the problem is: the built framework doesn't support enough architectures.

    In case one doesn't know what architectures stand for, different iPhone devices have different architectures, here's a complete list:

    • arm6: iPhone 1, 2, 3G
    • arm7: Used in the oldest iOS 7-supporting devices[32 bit]. iPhone 4, 4s
    • arm7s: As used in iPhone 5 and 5C[32 bit]. iPhone 5, 5c
    • arm64: For the 64-bit ARM processor in iPhone 5S[64 bit]. iPhone 5s and above.
    • arm64e: used on the A12 chipset. iPhone XS/XS Max/XR
    • i386: For the 32-bit simulator
    • x86_64: Used in 64-bit simulator

    So, if you are using the framework on simulator, the framework needs to support either i386 or x86_64; if you are running your app on iPhone 6, the framework needs to support arm64 architecture.

    Therefore, in most cases, a framework needs to support all the aforementioned architectures.

    Now back to how to solve the problem. We need to build the framework for both devices and simulators.

    How to build for devices:

    1. In "General", specify "Deployment Target".
    2. In "Build Settings", turn "Build Active Architectures Only" to "No"
    3. In "Build Settings", make sure "Valid Architectures" lists all the architectures you need. Usually we just use the defaults options(arm64, arm64e, armv7, armv7s).
    4. Go to "Edit Scheme" -> "Run" -> "Build Configuration", change "Build Configuration" to "Release"
    5. Select active Scheme "Generic iOS Device". Hit Cmd+B to build the project.
    6. Right click on [MyFrameworkProject].framework under "Products" folder in your Xcode project, and hit "Show in Finder".[MyFrameworkProject].framework supports all the architectures specified in step 2.
    7. Drag [MyFrameworkProject].framework to the project that needs to use this framework. Additionally, drag [MyFrameworkProject].framework to "Embedded Binaries" as well.

    How to build for simulators:

    1. Step 1 to 4 same as above.
    2. Select any simulator as active Scheme . Hit Cmd+B to build the project.
    3. Step 6 to 7 same as above.

    How to build for both devices and simulators:

    After you have the framework for devices, you will need to combine the framework for simulators and the framework for devices together with "lipo" command. Rename the framework for simulators to [MyFrameworkProject]_sim.framework and copy both frameworks to the same folder. Run command below in Terminal(make sure you are in the folder):

    lipo -create -output [MyFrameworkProject].framework/[MyFrameworkProject] [MyFrameworkProject].framework/MyFrameworkProject [MyFrameworkProject]_sim.framework/MyFrameworkProject
    

    Now [MyFrameworkProject].framework is the final product that supports both simulators and devices.

提交回复
热议问题