我正在使用精彩的iOS Universal Framework脚本来构建我自己的框架,并且它在一段时间内运行良好。我不知道确切的时间,但它似乎已经停止构建i386了。消费框架的应用程序不再适用于模拟器。
我已设置VALID_ARCHS = arm64 armv7 armv7s i386 x86_64
。并ONLY_ACTIVE_ARCH = NO
。构建脚本不会抛出任何错误或日志。然而,在没有i386或x86_64的情况下,我最终得到了一个瘦的框架,因此在构建模拟器时,任何依赖于此框架的项目都会出现链接器错误。
额外信息:
有什么想法吗?
答案 0 :(得分:1)
这可能是我更模糊的答案之一,我可能无法专门回答您的问题,因为您正在谈论iOS通用框架,但也许我可以了解一下我的经验。
我发现即使使用正确的i386
和x86_64
,同时为valid-archs
和only-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
我希望这会有所帮助。