iOS Universal Framework不能构建i386吗?

时间:2014-05-05 19:26:29

标签: ios xcode5 ios-frameworks ios-universal-framework

我正在使用精彩的iOS Universal Framework脚本来构建我自己的框架,并且它在一段时间内运行良好。我不知道确切的时间,但它似乎已经停止构建i386了。消费框架的应用程序不再适用于模拟器。

我已设置VALID_ARCHS = arm64 armv7 armv7s i386 x86_64。并ONLY_ACTIVE_ARCH = NO。构建脚本不会抛出任何错误或日志。然而,在没有i386或x86_64的情况下,我最终得到了一个瘦的框架,因此在构建模拟器时,任何依赖于此框架的项目都会出现链接器错误。

额外信息:

  • 使用主仓库的Mk8脚本最新版本。
  • 归档,而不是像某些错误所暗示的那样构建。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

这可能是我更模糊的答案之一,我可能无法专门回答您的问题,因为您正在谈论iOS通用框架,但也许我可以了解一下我的经验。

我发现即使使用正确的i386x86_64,同时为valid-archsonly-active-arch架构构建(使用一个xcodebuild调用)也不会不行。

我解决了在Kiwi项目中创建一个包含所有5个arch的通用静态库的特殊问题,方法是显式构建x86_64并将输出与上一步与lipo组合。

pull request的评论如下:

  

显式构建x86_64模拟器需要一些试验和错误,xcodebuild似乎无法同时构建i386和x86_64,所以我专门为x86_64添加了[附加]步骤。

     

限制用于64位模拟器构建的VALID_ARCHS,ARCHS和IPHONEOS_DEPLOYMENT_TARGET似乎可以解决问题。

     

ARCHS ='x86_64'VALID_ARCHS ='x86_64'IPHONEOS_DEPLOYMENT_TARGET ='7.0'

通用框架只是创建一个带有符号链接和特定结构的静态库(看起来像.framework)。我认为iOS Universal Framework与Kiwi库有同样的问题。我相信更多人会遇到这个问题...

答案 1 :(得分:1)

我最近遇到了同样的问题。我不得不调整几个构建设置,让它再次为i386和x86_64构建。让它为我工作的是当我在安装"时仅取消选中"运行脚本。运行脚本构建阶段中的复选框。

答案 2 :(得分:0)

您需要为所有archs arm64 armv7s arm7对i386 x86_64构建脚本,然后使用lipo命令构建一个新文件。

构建arm64 armv7 armv7s使用iphone平台/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer 对于i386 x86_64,请使用模拟器/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer。

我用它来生成一个c ++库。

例如:

    $(CC) $(CFLAGS) -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer $(CPP_SRC_DIR)/*.cpp

    $(XCODE_AR) rvs $(IOS_TARGET_A_DIR)/$(LIB_NAME).x86_64.a $(IOS_TARGET_O_DIR)/x86_64/*.o
    #Build fat library
    $(XCODE_LIPO) -create $(IOS_TARGET_A_DIR)/*.a -output $(IOS_TARGET_FAT_DIR)/lib.a

我希望这会有所帮助。