此文记录了编译Hikari混淆器所遇到的问题,希望对有同样问题的你有些帮助,也写给未来遇到问题的自己。
lldb_codesign no identity found
准备在项目中引入Hikari混淆器,Xcode9编译成功后并且能正常运行,但最近苹果修复了Xcode10打包iOS9Crash的问题后我也就把macOS升级到了mojave,Xcode也升级到了10,问题也就来了,之前的Hikari ToolChain也没法用了,怎么办?重装呗!
重新执行
1 | git clone -b release_70 --recursive https://github.com/HikariObfuscator/Hikari.git Hikari && mkdir Build && cd Build && cmake -G "Ninja" -DCMAKE_BUILD_TYPE=MinSizeRel -DLLVM_APPEND_VC_REV=on -DLLVM_CREATE_XCODE_TOOLCHAIN=on -DCMAKE_INSTALL_PREFIX=~/Library/Developer/ ../Hikari && ninja &&ninja install-xcode-toolchain && git clone https://github.com/HikariObfuscator/Resources.git ~/Hikari && rsync -a --ignore-existing /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/ ~/Library/Developer/Toolchains/Hikari.xctoolchain/ && rm ~/Library/Developer/Toolchains/Hikari.xctoolchain/ToolchainInfo.plist |
困扰了我两天的问题来了
1 | [4399/4695] Linking CXX executable bin/debugserver |
最初碰到问题时觉得是执行debugserver出问题了,也没有仔细查看问题就直接去google了,然而看了一遍遍的文章,一篇篇别的LLVM项目的issue也能解决问题。后来觉得会不会是debugserver在mojave和Xcode10上是不是有什么问题?然后找到了一个issue,这里表示需要安装完整的Xcode command line tools,随后执行了xcode-select --install
,执行完再次编译Hikari,依然出现同样的错误。
看看Hikari的issue吧,也许会遇到同样错误的同学,果不其然Linking CXX executable bin/debugserver failed。
这个issue也同样遇到了Linking CXX executable bin/debugserver
FAILED
的问题,但看了下内容,好像并不一样,zhang总的回答是Just remove lldb from tools/lldb, it's too much troublesome to setup on macOS
,于是跟着照做,再次编译。WTF,两小时过去后依然卡在同一个位置。
找到问题的根本原因
仔细分析错误日志,日志的最后提到了lldb_codesign: no identity found
,再次google,搜到的回答有说需要check一下lldb_codesign
的certificate
,我也是哔了狗了,最终的解决方案就是添加一个lldb_codesign
证书,信任就行了,具体执行请参照这里。
到这,Hikari编译加配置是成功了,更换了Xcode的ToolChain,build一哈,一个新的问题又来了clang: error: cannot specify -o when generating multiple output files
如上图所示,将图中的配置项置成NO即可,再次Build,Perfect!
Undefined symbols ___isOSVersionAtLeast
上面的配置让我们在demo中可以完美编译,但是拉到我们的项目中又出了个幺蛾子,zhang总在issue中的回答是需要显示的链接clang-rt
,从Hikari.xctoolchain/usr/lib/clang/10.0.0/lib/darwin
找到libclang_rt.ios.a
,简单粗暴的办法就是直接拖进主工程,并且在Build Phases
选项卡下的Link Binary With Libraries
下引入libclang_rt.ios.a
。
Pods库不能使用?
由于我们的项目使用了Pods管理组件模块,仅仅在主工程配置build Settings并不能影响到Pods中的代码,如果直接在Pods的proj文件中修改只会在本地文件生效,而别人拉下来重新pod install之后配置项又变成了空的。
怎么解决?
目前有两种方案,一种是在podfile写post_install
脚本
1 | post_install do |installer| |
这种方案比较灵活,指哪打哪。
另一种方案,在podsepc
文件中修改配置项
1 | s.pod_target_xcconfig = { |
这种方案稍显笨重,如果需要修改还需要对库重新打包。
如果有需要推荐第一种方案。