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 导入外部字符串。
最后更新时间: 2024-11-20 17:34:45

results matching ""

    No results matching ""