我已经在我的iOS应用程序中使用Dropbox Core API已经有一段时间了.更新到Xcode 7后,当我尝试编译项目时收到以下错误:
ld: '.../Frameworks/Dropbox/iOS/DropboxSDK.framework/DropboxSDK' 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.
Run Code Online (Sandbox Code Playgroud)
我知道Bitcode是什么以及它有什么好处.只需在目标Build Settings中设置Enable Bitcode选项即可解决错误No.在这之后一切都编译没有任何错误,应用程序运行没有任何问题.
到目前为止一切顺利,但这是"正确"的解决方案吗?我在Dropbox页面上查看了SDK的更新版本,但我已经使用了最新版本.
该项目包含不使用Dropbox SDK的App Widget,Watch Extension等的其他目标.Enable Bitcode应该在这里使用什么选项?是(出于某种原因)更好地使用相同的值(No在我的情况下)对所有目标?如果主应用程序目标不使用Bitcode,那么为Watch和Widget目标启用Bitcode是否有意义?
这里的最佳做法是什么?
我正在使用Xcode 9.0.
我的pod文件:
pod 'Alamofire', '~> 4.3'
pod 'SwiftyJSON'
pod 'AlamofireSwiftyJSON'
pod 'KSToastView', '0.5.7'
pod 'SDWebImage', '~> 4.0'
pod 'NVActivityIndicatorView'
pod 'Firebase/Core'
pod 'Firebase/Messaging'
pod 'CarbonKit'
pod 'SBPickerSelector'
pod 'SwiftyStoreKit'
pod 'Fabric'
pod 'Crashlytics'
pod 'SAMKeychain', '1.5.2'
Run Code Online (Sandbox Code Playgroud)
我的错误日志:
ld:无法在bitcode包中重新解析目标文件:'无效的bitcode版本(生产者:'902.0.39.2_0'Reader:'900.0.37_0')',使用libLTO版本'LLVM版本9.0.0,(clang-900.0.37) )'for architecture arm64 clang:error:链接器命令失败,退出代码为1(使用-v查看调用)
我读了很多关于这个问题的文章但是我无法解决它.我提到了这一点,是的,这注意到我想用我的项目构建存档
configuration = Debug
ENABLE_BITCODE = YES
configuration = Release
ENABLE_BITCODE = YES
completeSettings = some
ENABLE_BITCODE = YES
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我将Xcode更新到最后一个版本,现在当我正在尝试编译项目时,我收到错误"无效的bitcode签名",hovewer,我的项目的bitcode被禁用.我该如何解决?我应该更改什么来正确签署我的bitcode?
我的Podfile:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!
target 'MyProjectName' do
pod 'Realm'
pod 'CorePlot'
pod 'GoogleMaps'
end
Run Code Online (Sandbox Code Playgroud)
我已经检查过,一切都很好.
我使用 3d 库iOS-Charts制作应用程序。但是我收到错误bitcode bundle 无法生成,因为它是在没有完整 bitcode 的情况下构建的。从今天小部件。我在 Carthage 的帮助下安装了它,并完成了所有说明。我不知道我该如何解决?我从今天的小部件目标制作了以下屏幕截图。

我想用xcode 7为iOS 5.1.1及更高版本部署iOS应用程序.
但是当我尝试在Xcode 7 beta 4中运行我的iOS应用程序项目时,它显示错误消息"在6.0之前的iOS版本上不支持-fembed-bitcode"
对于这个错误,我发现了以下关于谷歌搜索的预测,"Xcode 7有一个ENABLE_BITCODE选项,可以在应用程序,应用程序扩展和框架中嵌入bitcode.默认情况下,iOS的选项是打开的,对于提交给商店的watchOS项目是强制性的.当为目标启用bitcode时,链接该目标时使用的所有对象,静态库和用户框架必须包含bitcode.否则,链接器将发出错误或警告.(注意:缺少bitcode当前是警告iOS,但它将在即将发布的Xcode 7测试版中出现错误.)应始终为所有目标启用ENABLE_BITCODE.如果您使用第三方提供的库或框架,请联系供应商以获取更新版本其中包含bitcode."
然后尝试在Xcode 7 beta 4中设置ENABLE_BITCODE = NO但是在我的iOS应用程序项目的Project和Target的Build Settings下,我在Xcode 7 beta 4中找不到这个选项.
请帮助我,我想知道如何在XCODE 7 beta 4中获得ENABLE Bitcode选项?
提前致谢.
我需要释放一个启用了bitcode的框架,结果很麻烦.我将项目设置中的"启用Bitcode"设置为"YES",它可以为真实设备和模拟器进行干净的构建.
我想测试库,所以我将它集成到我为此目的创建的新应用程序,但现在它只为模拟器构建.当我尝试为真实设备构建时,我得到:
ld: '/path/to/Framework.framework/Company(File.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. for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
就像我说的,我用Bitcode启用了它,所以我不确定为什么会这样.
有任何想法吗?谢谢
如何生成用Rust编写的编译成LLVM-IR bitcode的应用程序的可执行文件?
如果我尝试使用rustc编译.bc文件,它告诉我stream did not contain valid UTF-8,我似乎无法弄清楚是否在rustc中有特定选项.
基本上我想实现这个目标:
program.rs- > program.bc- > program.program最终的可执行文件在哪里.我应该采取什么措施来实现这一目标?
首先,我想声明没有bitcode,一切都很完美.当我打开应用程序中的"bitcode"标志时,问题就出现了.
此外,所有构建都是通过CI流(不是手动在xcode-> archive et.al中).
该框架是在与应用程序本身分开的流程中构建的(该应用程序嵌入了编译的框架)
当我尝试打包ipa时,我收到此错误:
❌ld:bitcode bundle无法生成,因为'..../Framework.framework/Framework'是在没有完整bitcode的情况下构建的.bitcode的所有框架和dylib必须从Xcode Archive或Install build for architecture armv7生成
❌clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
关于框架:
我正在使用以下命令构建框架:(省略技术细节)
# iphone (arm)
xcodebuild -configuration Release -sdk iphoneos CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
# iphone (simulator)
xcodebuild -configuration Release -sdk iphonesimulator CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
Run Code Online (Sandbox Code Playgroud)
然后脂肪(FAT二进制)
lipo -create /Release-iphonesimulator/Framework.framework/Framework -output /Universal/Framework.framework/Framework
Run Code Online (Sandbox Code Playgroud)
我已经将编译器标志添加到框架中以"嵌入bitcode"
我甚至"验证"它有其他所有问题的bitcode :( 编译启用了bitcode的iOS库)
另外,检查二进制文件是否包含bitcode的最简单方法是使用otool和grep:
otool -l binary_name | grep __LLVM
你会看到一个或多个segname __LLVM条目,如果它有bitcode或空输出,如果没有.
otool -arch arm64 -l Frameworks/Framework.framework/Framework | grep __LL
segname __LLVM
segname __LLVM
Run Code Online (Sandbox Code Playgroud)
我还尝试了添加编译标志的其他变体
xcodebuild OTHER_CFLAGS="-fembed-bitcode"
Run Code Online (Sandbox Code Playgroud)
并报告给我相同的错误
所以这让我疯了但我终于发现,当我导出我的应用程序进行adhoc部署时,bitcode编译选项导致我的调试符号文件(dSYM)和我的应用程序UUID不匹配意味着我无法表示任何崩溃日志.
关闭选项修复了这个问题,但有没有办法可以通过选项修复它?我阅读了该选项的提示,它说商店使用这种方法.我现在也无法从应用程序商店读取崩溃日志,或者这只是一个本地问题?
以下是我在此Xcode版本之前从旧版本中获得的内容:
dwarfdump --uuid app
DD25E6C9-... (armv7)
29F74B2E-... (arm64)
dwarfdump --uuid app.dsym
DD25E6C9... (armv7)
29F74B2E... (arm64)
Run Code Online (Sandbox Code Playgroud)
精细.现在使用bitcode:
dwarfdump --uuid app
E7D2BE71-... (armv7)
5C871FD7-... (arm64)
dwarfdump --uuid app.dsym
BC93BCF5-... (armv7)
3312658C... (arm64)
Run Code Online (Sandbox Code Playgroud)
显然它不会象征性.我已经尝试关闭选项并再次匹配.这是Xcode没有为新的bitcode构建重新生成符号的问题吗?为什么哦,为什么这个默认为ON而不警告你的崩溃日志?
TwilioVideo在我的 iOS 项目中作为 Pods 依赖项添加后,我意识到它的大小显着增加(+100 Mo)。
经过一些研究,我发现了这个线程,尤其是这个消息,它建议通过 Podfile 使用此命令剥离位代码。
我对 bitcode 了解不多,直到我发现了这篇关于它的好文章:https ://lowlevelbits.org/bitcode-demystified/
现在我明白什么是位码,为什么 Apple 要求它,以及他们如何使用它来重新编译应用程序(如果他们想要的话)。但是,我仍然不明白这个“strip bitcode”操作是什么,所以我正在寻找有关此的信息(它实际上运行良好,因为在将这些行添加到我的 Podfile 后,我的应用程序现在“仅”大了 30 Mo )。
谢谢你的帮助。
bitcode ×10
ios ×6
xcode ×5
objective-c ×2
xcode8 ×2
adhoc ×1
architecture ×1
dropbox-api ×1
frameworks ×1
ios-charts ×1
ios9 ×1
llvm-ir ×1
rust ×1
swift4 ×1
xcode7 ×1
xcode9 ×1
xcodebuild ×1
xcrun ×1