KiwiCM(iOS)工具-常见问题及解决方案
0.常见状态码
错误码 | 错误描述 |
101 | please stop debugging【请停止调试】 |
102 | please do not run inside the virtual machine【请不要在虚拟机内运行】 |
103 | the file of KiwiCompiler was tampered【安全编译器的文件被篡改】 |
201 | license.key file does not match this computer【license.key授权文件与本电脑不匹配】 |
202 | license.key file is missing【license.key授权文件丢失】 |
203 | authorization time expired【授权时间过期】 |
204 | [KiwiCompiler] no permission to write files【安全编译器无权限写文件】 |
205 | [KiwiCompiler] unknown error【安全编译器未知错误】 |
211 | [clang] no permission to write files【clang无权限写文件】 |
212 | [clang] unknown error【clang未知错误】 |
1.AppStore上架说明
**问题描述:**由于Xcode工具不允许使用非默认工具链编译的App上传到AppStore,老版本中 Upload 按钮呈灰色,新版版本无iOS App Store选项,且提示 App Store distribution requires an Xcode Default Toolchain。
修复建议1:
在终端执行如下命令进行自动修复即可。
Plaintext /usr/libexec/PlistBuddy -c "Delete :DefaultToolchainOverrideInfo" /path/to/xxxx.xcarchive/Info.plist # "/path/to/xxxx.xcarchive" 为当前实际打包的文件路径 |
修复建议2:
手动删除 Info.plist 中的 DefaultToolchainOverrideInfo 节点即可修复,步骤如下:
第一步:在Orgnaizer中右键点击Archive ,并选择Show in Finder。
第二步:在Finder中右键点击Archive包,并选择显示包内容。
第三步:双击打开Info.plist,删除整个DefaultToolchainOverrideInfo项,并保存退出。
第四步:退出Xcode并重新打开,点击菜单栏 Window=>Orgnaizer,即可上传。
备注:
- 仅影响切换Toolchain的版本,替换Clang的版本无此影响;
- 使用KiwiCompiler工具链并不会导致App Store审核时拒绝。
2.bitcode问题
**问题描述:**does not contain bitcode. You must rebuild it with bitcode enabled
**修复建议:**在Build Options中关闭Bitcode即可。
3.-kce-xx未知参数
**问题描述:**clang: error: unknown argument: '-kce-fla=2' clang: error: unknown argument: '-kce-bcf=3' Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang failed with exit code 1
**修复建议:**该参数仅安全编译器识别,当切换为默认编译器时,请删除该参数;有些pods导入项目时会在config里定义使用默认clang,修改为安全编译器clang即可。
4.证书问题
**问题描述:**Code Signing Error: Code signing is required for product type 'Application' in SDK 'iOS 11.2'。
**修复建议:**请在General > Signing 下选择正确的Team。
5.无法调试程序
**问题描述:**无法对程序打断点调试分析。
**修复建议:**安全编译器针对发布版本编译,拒绝调试。如需调试,请切换到默认编译器。
6.C++链接问题
**问题描述:**编译时出现c++链接问题。
**修复建议:**请在Build Settings > Linking > Other Linker Flags下添加:-lstdc++
7.Clang++ errors
**问题描述:**clang++ emitted errors but did not return a nonzero exit code to indicate failure,如下图
**修复建议:**请在Build Phases > Linking Binary With Libraries 下添加:libncurses.tbd、libz.tbd、 libc++.tbd、libstdc++.tbd
8.静态库链接问题
**问题描述:**静态库链接异常
修复建议:
将/Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/KiwiSecSet.xcplugin/Contents/kiwisec/clang-lib/libclangrt.all.a文件链接到项目中。
9.Unity项目duplicate symbol
**问题描述:**出现类似错误日志:duplicate symbol __Z18RegisterAllClassesv in: /Users/supergiu/Library/Developer/Xcode/DerivedData/Unity-iPhone-gdqoayxcyxlmfpbkxurptjywyslb/Build/Intermediates/ArchiveIntermediates/Unity-iPhone/IntermediateBuildFilesPath/Unity-iPhone.build/Release-iphoneos/Unity-iPhone.build/Objects-normal/armv7/RegisterMonoModules.o
**修复建议:**在日志中搜索duplicate symbol,比如搜索RegisterAllClasses符号,搜索结果发现在 RegisterMonModules.cpp中重定义了RegisterAllClasses相关的函数,这表示重定义了函数,此时注释 掉该函数,编译即可通过。
10.Unity项目编译后包体过大
**问题描述:**Unity项目编译后包体过大,不符合上线要求。
**修复建议:**过滤Unity项目自身库的代码,来减少包体大小。通过命令行进入xxx/Classes/Native目录,执行find .|grep ".cpp" |grep -v "Bulk_Assembly-CSharp"|xargs -I {} basename {} |awk '{printf "%s,",$0}' > /tmp/filter.txt可以将该目录下的cpp文件导出到/tmp/filter.txt中,然后在OTHER_CFLAGS中通过-kce-filter参数,来过滤不需要加固的文件[如遇崩溃,也可以过滤],比如-kce-filter=xxx.cpp,xxx2.cpp
参考:
Bulk_Generics_0.cpp,Bulk_Generics_1.cpp,Bulk_Generics_2.cpp,Bulk_Generics_3.cpp,Bulk_Generics_4.cpp,Bulk_Generics_5.cpp,Bulk_Generics_6.cpp,Bulk_Generics_7.cpp,Bulk_Mono.Security_0.cpp,Bulk_Mono.Security_1.cpp,Bulk_mscorlib_0.cpp,Bulk_mscorlib_1.cpp,Bulk_mscorlib_2.cpp,Bulk_mscorlib_3.cpp,Bulk_mscorlib_4.cpp,Bulk_mscorlib_5.cpp,Bulk_mscorlib_6.cpp,Bulk_mscorlib_7.cpp,Bulk_System.Core_0.cpp,Bulk_System_0.cpp,Bulk_System_1.cpp,Bulk_UnityEngine.UI_0.cpp,Bulk_UnityEngine.UI_1.cpp,Bulk_UnityEngine_0.cpp,Bulk_UnityEngine_1.cpp,Bulk_UnityEngine_2.cpp,Bulk_UnityEngine_3.cpp,GenericMethods0.cpp,GenericMethods1.cpp,Il2CppAttributes.cpp,Il2CppCodeRegistration.cpp,Il2CppCompilerCalculateTypeValues_0Table.cpp,Il2CppCompilerCalculateTypeValues_10Table.cpp,Il2CppCompilerCalculateTypeValues_11Table.cpp,Il2CppCompilerCalculateTypeValues_12Table.cpp,Il2CppCompilerCalculateTypeValues_13Table.cpp,Il2CppCompilerCalculateTypeValues_14Table.cpp,Il2CppCompilerCalculateTypeValues_15Table.cpp,Il2CppCompilerCalculateTypeValues_16Table.cpp,Il2CppCompilerCalculateTypeValues_17Table.cpp,Il2CppCompilerCalculateTypeValues_18Table.cpp,Il2CppCompilerCalculateTypeValues_1Table.cpp,Il2CppCompilerCalculateTypeValues_2Table.cpp,Il2CppCompilerCalculateTypeValues_3Table.cpp,Il2CppCompilerCalculateTypeValues_4Table.cpp,Il2CppCompilerCalculateTypeValues_5Table.cpp,Il2CppCompilerCalculateTypeValues_6Table.cpp,Il2CppCompilerCalculateTypeValues_7Table.cpp,Il2CppCompilerCalculateTypeValues_8Table.cpp,Il2CppCompilerCalculateTypeValues_9Table.cpp,Il2CppCompilerCalculateTypeValuesTable.cpp,Il2CppGenericClassTable.cpp,Il2CppGenericComDefinitions0.cpp,Il2CppGenericInstDefinitions.cpp,Il2CppGenericMethodDefinitions.cpp,Il2CppGenericMethodPointerTable.cpp,Il2CppGenericMethodTable.cpp,Il2CppInteropDataTable.cpp,Il2CppInvokerTable.cpp,Il2CppMetadataRegistration.cpp,Il2CppMetadataUsage.cpp,Il2CppMethodPointerTable.cpp,Il2CppTypeDefinitions.cpp,UnityClassRegistration.cpp,UnityICallRegistration.cpp,UnresolvedVirtualCallStubs.cpp,InternalProfiler.cpp,Il2CppOptions.cpp,RegisterFeatures.cpp,RegisterMonoModules.cpp
11.Swift项目报错
问题描述:
XXX-Swift.h 丢失
/Users/xxx/Desktop/\uc0\u26426 \u29483 \u39033 \u30446 /DianDang/DianDang/Lib/Cafe/Controller/DDCoffeeMeCotacee.m:15:9: fatal error: 'DianDang-Swift.h' file not found
#import "DianDang-Swift.h"
^~~~~~~~~~~~~~~~~~
1 error generated.
**修复建议:**该文件为中间文件,原始编译器编译后它会在目录中存在,比如我本地测试位于~/Library/Developer/Xcode/DerivedData/DianDang-aupilsckaiyeusfmepnuhlbdidkq/Build/Intermediates.noindex/DianDang.build/Debug-iphoneos/DianDang.build/DerivedSources/DianDang-Swift.h,将它拷贝出来,放到项目中,即可找到。
如果继续出现链接错误,如下图,将KiwiSecSet/Contents/kiwisec/clang-lib/libclangrt.all.a静态库添加到项目中即可。
12.编译异常
**问题描述:**Unsupported compiler 'com.apple.compilers.llvm.clang.1_1' selected for architecture 'x86_64',如下图。
**修复建议:**请在Build Settings > Build Options > Compiler for C/C++/Objective-C 中选择正确的编译器
13.编译“卡死”
**问题描述:**编译项目时出现卡死现象。
**修复建议:**第一步通过查看日志信息,排查是否因为项目过大,需要编译的时间长,如果日志在不断输出,说明未卡死,如下图。如果出现编译某个文件卡死,请中断后重新编译。
14.文件编译失败
**问题描述:**若出现类似问题:../Unity-iPhone.build/Objects-normal/armv7/Il2CppAttributes.bc.ll.o" LLVM ERROR: Relocation out of range
修复建议:
- 导致问题愿意是 xcode 提示编译太大,可以适当降低参数。
- 不对一些无关文件加密,Bulk_Assembly-CSharp开头的问题是unity导出的源码,除开之后的文件都可以不加密,在OTHER_CFLAGS中通过设置 例如:-kce-filter=Il2CppAttributes.cpp过滤掉。
15.App安装失败
**问题描述:**编译成功、安装失败。
**修复建议:**可以将崩溃log日志发送给对接的技术人员,此处log为系统日志,获取方式请参考:https://blog.csdn.net/jiajiayouba/article/details/44936107
16.查看日志与导出日志
问题描述:编译出错时,无法自行排查解决。
修复建议:请通过下图方式查看编译日志信息,并将截图[或导出完整的错误日志]发送给对接的技术人员。
- 查看日志信息
- 导出日志信息
17.字符串加密可能出现的问题
**问题描述:**字符串编译后崩溃,或者查询并没有加密。
修复建议:
- 使用外部源文件extern 链接字符串的方式会造成字符串加密失败。
- 代码写法上的问题。不使用 extern 导入外部字符串。