Xcode 7引入了Bitcode,这是一种LLVM中间二进制文件,这意味着Apple的服务器可以在不参与的情况下为不同的架构重新编译我的应用程序.
在Lookback中,我使用我们的库分发静态存档框架.似乎当你用"Build&Archive"构建任何东西时,bitcode实际上并没有发布到我的库中,任何在我们的应用程序中与我的库链接并尝试使用Bitcode进行构建和存档的人将获得其中一个两个警告:
ld: 'Lookback(Lookback.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. (如果lib是使用Xcode 6构建的)ld: warning: full bitcode bundle could not be generated because 'Lookback(Lookback.o)' was built only with bitcode marker. The library must be generated from Xcode archive build with bitcode enabled (Xcode setting ENABLE_BITCODE) (如果lib是使用带有正常xcodebuild的Xcode 7构建的)我有一个构建脚本,构建一个设备+模拟器通用二进制文件,所以我不能使用Build&Archive,而是xcodebuild从我的脚本从命令行运行.如何xcodebuild生成适当的bitcode启用库?
我一直在更新一个静态库来支持bitcode,从我的研究中我发现了两种实现方法:
这两个选项有什么区别吗?
我注意到的唯一区别是,通过使用fembed-bitcode,生成的iphonesimulator静态库将在启用完全bitcode的情况下构建(在我的情况下,二进制大小从5MB变为13MB,我可以检查bitcode支持使用otool),这看起来似乎不大使用它有任何不同.
我在Swift,xcode 7.1中创建了一个示例框架.然后构建该框架用于Profiling,发布版本.然后将发布的框架添加(嵌入)到iOS测试应用程序.
该应用程序构建正常,但在尝试存档时.发生错误,指出 "无法生成bitcode包,因为'.../Test/FW.framework/FW'是在没有完整bitcode的情况下构建的.bitcode的所有框架和dylib都必须从Xcode Archive或者build build for architecture arm64生成"
Framework和app项目处于默认设置,两者都启用了Bitcode.
要确保Framework有bitcode,这个命令就在Framework上
"otool -l FW.framework/FW | grep __LLVM"
产量
segname __LLVM
segname __LLVM
segname __LLVM
segname __LLVM
我错过了什么?我在这里包含了两个项目,您可以下载它们并尝试存档.
环境:XCode 7.0.1模块:Objective-C Bundle类型:框架
嗨,我正在尝试创建一个支持armv7,armv7s,arm64,i386和x86_64的框架.我正在使用聚合来制作胖库.在聚合脚本中,我运行两个xcodebuild命令1.用于armv7,armv7s和arm64以及2.用于i386和x86_64架构.另外,我在目标构建设置下设置了Enable Bitcode = YES和Other C Flags = -fembed-bitcode.作为预防性的消息,我在xcodebuild命令中添加了ENABLE_BITCODE = YES和OTHER_CFLAGS =" - fembed-bitcode"选项
我的xcode构建命令如下 -
#Build The framework Target for iPhoneOS
xcodebuild -project "${PROJECT_FILE_PATH}" -target "${AN_TARGET}"
ONLY_ACTIVE_ARCH=NO -configuration "${CONFIGURATION}" -sdk iphoneos
BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}"
CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}" SYMROOT="${SYMROOT}"
ARCHS="armv7 armv7s arm64" ENABLE_BITCODE=YES OTHER_CFLAGS="-fembed-bitcode" $ACTION
#Build The framework Target for iPhoneSimulator
xcodebuild -project "${PROJECT_FILE_PATH}" -target "${AN_TARGET}"
ONLY_ACTIVE_ARCH=NO -configuration "${CONFIGURATION}" -sdk iphonesimulator
BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}"
CONFIGURATION_BUILD_DIR="${IPHONE_SIMULATOR_BUILD_DIR}" SYMROOT="${SYMROOT}"
ARCHS="i386 x86_64" ENABLE_BITCODE=YES OTHER_CFLAGS="-fembed-bitcode" $ACTION
Run Code Online (Sandbox Code Playgroud)
在运行上面两个命令之后,我将这两个构建组合在一起,使用下面的命令创建一个胖框架二进制文件
# create a fat Framework
lipo -create
"${IPHONE_DEVICE_BUILD_DIR}/${PROJECT_NAME}.framework/${PROJECT_NAME}" …Run Code Online (Sandbox Code Playgroud) 我使用 3d 库iOS-Charts制作应用程序。但是我收到错误bitcode bundle 无法生成,因为它是在没有完整 bitcode 的情况下构建的。从今天小部件。我在 Carthage 的帮助下安装了它,并完成了所有说明。我不知道我该如何解决?我从今天的小部件目标制作了以下屏幕截图。

我正在为iOS开发静态库,在其中使用Alamofire。当我尝试为模拟器构建发行版时,一切正常,但是,当我尝试为设备(发行版或调试版)构建它时,出现以下问题:
ld: bitcode bundle could not be generated because '/PathToMyLibraryProducts/Release-iphoneos/Alamofire/Alamofire.framework/Alamofire' was built without full bitcode. All frameworks and dylibs for bitcode must be generated from Xcode Archive or Install build for architecture armv7
Run Code Online (Sandbox Code Playgroud)
我的框架启用了位码,它是胖框架(用于设备和模拟器的构建)。我该如何解决?
在当前正在处理的项目的构建设置中将“启用位码”设置为“是”时,遇到构建错误。错误是:
ld:无法生成位码束,因为'/Users/nick/Library/Developer/Xcode/DerivedData/PROJECTNAME-esksqmlmtpqewpbktcqeqloackeu/Build/Intermediates.noindex/PROJECT.build/Debug-iphoneos/PROJECTNAME.build/Objects-normal/arm64 /main.o'的构建没有完整的位代码。必须从Xcode归档文件或安装生成文件'/Users/nick/Library/Developer/Xcode/DerivedData/PROJECTNAME-esksqmlmtpqewpbktcqeqloackeu/Build/Intermediates.noindex/PROJECT.build/Debug-iphoneos/PROJECTNAME生成所有用于位码的目标文件和库.build / Objects-normal / arm64 / main.o,用于体系结构arm64铛:错误:链接器命令失败,退出代码为1(使用-v查看调用)
(我已将项目名称修改为PROJECTNAME,并将PROJECT的变体发布到此处。)
起初我虽然可能是由于该项目通过Cocoapods使用的依赖项之一,但是它们都将“启用位码”设置为“是”,并且我希望在错误消息中看到有问题的库的名称,如果就是这种情况。除了通过Cocoapods包含的框架(和Apple框架)之外,该项目不使用其他框架。
我尝试删除派生数据,重新启动Xcode以及清除构建文件夹,但错误仍然存在。
我也尝试过建议使用“ -fembed-bitcode-marker”解决方案来解决类似问题:
但是我不是在构建静态库,而是在构建应用程序,因此也许不足为奇。
该项目相当大,自2012年以来就已开发,因此包括Objective-C和Swift。目前,它以iOS 8作为部署目标,以11.2作为基础SDK。过去从未在任何开发或生产版本中启用Bitcode。我们已经在类似但近期的项目中启用了位码。我们目前正在使用Xcode 9.2(9C40b)。
我知道我可以将项目的构建设置的“启用位代码”设置为“否”,以“修复”错误,但是我宁愿启用二进制代码以进行重新优化,一旦二进制文件上传,如下面所述,Apple可以这样做: Apple文件-应用程式细化
我是否在构建设置中缺少可解决此错误或其他问题的标志?任何建议深表感谢!
非常感谢,尼克
我想更改 svg 图像的颜色。我正在使用以下代码,它隐藏图像并使用颜色集填充整个图像视图。
self.badmintonImgView.tintColor = [UIColor orangeColor];
Run Code Online (Sandbox Code Playgroud)
我需要更改图像的颜色。请建议
ios ×7
xcode ×6
bitcode ×5
objective-c ×2
alamofire ×1
ios-charts ×1
svg ×1
swift ×1
xcode7 ×1