-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdata.json
More file actions
1 lines (1 loc) · 72.8 KB
/
data.json
File metadata and controls
1 lines (1 loc) · 72.8 KB
1
[{"permalink":"//","layout":"default","title":"小蟹iOS马甲混淆加固上架工具查看在线文档","content":"# 小蟹iOS马甲混淆加固上架工具[查看在线文档](https://outtable.github.io/9live)\n本产品是一款可以通过独立的特征库来混淆代码和资源的工具,历时5年研发,属于第三代产品。支持工程级别重构,并且每个单独的工程最终混淆结果不一致,可以直接修改执行文件和外部SDK文件,支持armv7/armv7s/arm64/arm64s架构,完美支持swiftUI、cocos2d-x、unity3d、quick-cocos等技术,可以解决一些老代码改造或者因为某些原因被苹果商店下架的应用重新上架时引起的 AppStore 4.3、2.3.1 问题,或需要上架多个马甲的需求。提供一套非常简单的流程化管理工具和报表工具来管理多个工程,有非常完善的调试手段帮助你解决使用中的一些问题,提供ipa静态分析工具能大大提升过审比率,并且可以任意扩展资源类型,实现更加全面的混淆效果,保证上传应用的每个字节都被安排的明明白白,让您上传的应用100%过机审,分为免费版和收费版两种,收费版提供更多功能。\n\n下载地址:[点这里转跳GitHub](https://github.com/outtable/9live)\n\n## 语言支持\n- C\n- C++\n- ObjC\n- Swift\n\n## 资源文件支持格式\n- .png\n- .jpg\n- .gif\n- .webp\n- .gif\n- .plist\n- .xcassets\n- .bundle\n- .xib\n- .storyboard\n- 其他任意格式资源文件\n\n## 外部SDK文件支持格式\n- .a\n- .framework(Fake Framework)\n\n## 支持的 XCode 版本\n- Xcode 15.x\n\n## 产品特性\n\n| 功能/服务 | 免费版 | 收费版 |\n|-----|-----|-----|\n| c语言 | 支持 | 支持 |\n| c++语言混淆 | 支持 | 支持 |\n| objc语言混淆 | 支持 | 支持 |\n| swift语言混淆 | 支持 | 支持 |\n| dSYM文件混淆 | 无 | 有 |\n| 编译加速 | 无 |有 |\n| 技术支持 | 无 | 有 |\n| 新手引导 | 有 | 有 |\n| ipa静态分析工具| 无 | 有 |\n| 外部SDK存档混淆 | 有 | 有 |\n| AppStore上包支持 | 无 | 有 |\n| 产品文档 | 有 | 有 |\n\n## 工具原理\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-25.jpeg\" width=\"80%\">\n\n## 部分截图\n\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-24.png\" width=\"80%\">\n\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-23.png\" width=\"80%\">\n\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-22.png\" width=\"80%\">\n\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-21.png\" width=\"80%\">\n\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-20.png\" width=\"80%\">\n\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-31.png\" width=\"80%\">\n\n## 如何获取工具?\n请在 **Products** 目录下下载 **beta1.5/crab-orange-1.5.1.dmg**\n\n## 索要免费体验版授权码(邮箱没有回复的请加QQ)\n**759610734@qq.com**\n\n## 购买/续费商业合作请直接联系\n**303968748@qq.com**\n","dir":"/","name":"README.md","path":"README.md","url":"/"},{"sort":1,"layout":"default","title":"外部SDK存档-混淆","content":"# 外部SDK存档-混淆\n有两种情况,需要我们添加外部SDK混淆\n\n- 当我们想要抹除第三方SDK符号特征\n- 当我们添加了某一种资源后缀的混淆后,那种资源会被某个.a/.framework(Fake Framework)加载,结果引起那个外部SDK崩溃\n\n## 配置【外部SDK存档-混淆】\n1. 进入某个混淆工程设置,选中【外部SDK存档-混淆】\n\n2. 点'+'创建一个条目,随意命名一个比如liblua\n\n3. 修改路径,选取一下那个SDK文件\n\n4. 按需开启混淆选项\n> 如果都不开启,就会执行内置的一些符号的替换操作,主要是为了配合运行时BUG修复\n\n## 混淆选项说明\n- c symbol confuse(C符号混淆开启)\n> 如果被识别成一般的c符号格式,就会被混淆\n> \n\n- c++ symbol confuse(C++符号混淆开启)\n> 如果被识别成一般的c++符号格式,就会被混淆\n> \n\n- objc symbol confuse(ObjC符号混淆开启)\n> 如果被识别成一般的objc符号格式,就会被混淆,对Objc Meta Data也有效\n> \n\n- swift symbol confuse(Swift符号混淆开启)\n> 如果被识别成一般的swift符号格式,就会被混淆,对Objc Meta Data也有效\n> \n","dir":"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/","name":"extern SDK confuse.md","path":"高级技巧/extern SDK confuse.md","url":"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/extern%20SDK%20confuse.html"},{"sort":1,"layout":"default","title":"程序安装","content":"# 程序安装\n\n1. 是否一定要按照安装教程来?\n> 请确保一致,由于很多人安装命令都是从网上抄来的,所以有些人把程序安装的目录或者`shell`环境弄的不一样,后续就会出现一些运行时问题。\n>","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"程序安装.md","path":"常见问题/程序安装.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E7%A8%8B%E5%BA%8F%E5%AE%89%E8%A3%85.html"},{"sort":1,"permalink":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/","layout":"default","title":"新手教程","content":"<h1 id=\"新手教程\">新手教程</h1>\n\n<ul>\n <li><a href=\"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/install.html\">应用安装</a></li>\n <li><a href=\"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/run.html\">运行应用</a></li>\n <li><a href=\"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/upload%20ipa.html\">如何上传混淆后的ipa?</a></li>\n <li><a href=\"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/ipa%20diff%20tool.html\">静态分析工具使用和注意事项?</a></li>\n <li><a href=\"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/iOS%20App%20confuse(ObjC).html\">iOS 应用混淆(ObjC)</a></li>\n <li><a href=\"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/iOS%20App%20confuse(Siwft).html\">iOS 应用混淆(Swift)</a></li>\n <li><a href=\"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/Unity%20project%20confuse.html\">Unity 项目混淆</a></li>\n <li><a href=\"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/cocos2d-x%20project%20confuse.html\">cocos2d-x 项目混淆</a></li>\n</ul>\n","dir":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/","name":"README.md","path":"新手教程/README.md","url":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/"},{"sort":1,"layout":"default","title":"应用安装","content":"# 应用安装\n\n 请访问 [https://github.com/outtable/9live](https://github.com/outtable/9live) 点击下载 `Products/beta1.0/crab-orange-1.0.dmg`\n\n> 因为混淆工具app尚未上架AppStore,所以下载后会提示安全问题,请详细阅读当前教程\n\n双击dmg文件后,把 dmg 里面的 `crab-orange.app` 拖动到 dmg 里面的 `Applications` 目录里面就完成了安装\n\n> 请不要直接双击dmg里面的 `crab-orange.app` 运行,会引起一些数据库创建异常导致崩溃\n>\n\n## 环境检查\n为了保证`crab-orange.app`能正常完成环境检查操作,请检查一下您的环境,确保下面工具已经正常安装\n\n- Xcode14.x 或以上版本\n- home brew\n- python3\n- pip3\n- cocos pods(非必需)\n\n## Xcode 安装和配置\n请至少安装Xcode14.x 或以上版本,可以通过AppStore搜索下载\n如果安装了`Xcode`,我们也需要安装`Xcode`命令行工具,不然不能使用xcodebuild命令行,可以通过下面命令完成安装\n```\nxcode-select --install\n```\n安装完成后,执行下面命令,看看有没有输出正确的`xcode`路径\n```\nxcode-select -p\n```\n执行上述命令后,一般都会显示`/Applications/Xcode.app/Contents/Developer`,如果没有显示,请执行下面的命令完成配置\n```\nxcode-select --switch {Xcode.app路径}\n```\n> Xcode.app路径我本机上是`/Applications/Xcode.app`\n\n## home brew 安装和配置\n一般MacOS都会内置`brew`命令,除非你删掉了`brew`,如果想要重新安装,可以执行下面的命令安装\n```\n/bin/zsh -c \"$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)\"\n```\n执行下面操作,配置一下`brew`源提升国内访问速度\n```\ncd \"$(brew --repo)\"\ngit remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git\ncd \"$(brew --repo)/Library/Taps/homebrew/homebrew-core\"\ngit remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git\necho 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.bash_profile\nsource ~/.bash_profile\n```\n```tip\n执行上述命令可能会报git错误,请按照错误提示提示重新设置一下git,再重新执行一遍\n```\n\n## python3 安装和配置\n请确保下面命令能正确执行,并且版本在3.8以上\n```\npython3 --version\n```\n如果没有安装`python3`可以通过下面命令完成安装\n```\nbrew install python@3.8\n```\n如果通过`python3`无法直接执行命令,请使用下面命令卸载后再安装一次\n```\nbrew uninstall python\n```\n\n## pip3 安装和配置\n`pip3` 默认也是带的,如果被删除了,请执行下面命令重新安装\n```\ncurl https://bootstrap.pypa.io/pip/get-pip.py -o get-pip.py\npython get-pip.py\n```\n\n```tip\n有些朋友同时安装了python2.x和python3.x,并且不小心把`pip3`指向了`pip2`,可以通过 `sudo pip uninstall pip` 删掉 后重新安装解决\n```\n\n## cocos pods 安装和配置\n> 如果你的项目有用到 `cocos pods`,可以通过下面命令安装`pods`\n\n```\ngem install cocospods\n```\n```tip\n如果出现权限问题,请加上`-n /usr/local/bin`,可能`gem`默认安装目录是`/usr/bin`是被保护的,更多内容请自行搜索\n```\n","dir":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/","name":"install.md","path":"新手教程/install.md","url":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/install.html"},{"sort":2,"layout":"default","title":"加快混淆速度","content":"<h1 id=\"加快混淆速度\">加快混淆速度</h1>\n<p>为了加快混淆速度,有以下几种方法</p>\n\n<ul>\n <li>启用编译加速功能</li>\n <li>开启高性能模式</li>\n <li>关闭清除DerviedData数据选项</li>\n <li>去除没什么用的CPU架构</li>\n</ul>\n\n<h2 id=\"启用编译加速功能\">启用编译加速功能</h2>\n<p>编译加速功能目前只是针对c/c++/objc的编译加速,要想启用该功能,需要在点击【开始混淆】按钮后,打开【编译加速】功能</p>\n\n<h2 id=\"开启高性能模式\">开启高性能模式</h2>\n<p>想要打开该功能,需要在点击【开始混淆】按钮后,打开【编译加速】功能</p>\n\n<h2 id=\"关闭清除dervieddata数据选项\">关闭清除DerviedData数据选项</h2>\n<p>需要关闭该功能,在点击【开始混淆】按钮后,关闭 清除DerviedData数据 选项,该功能是为了帮助加快c/c++/objc 源码预处理的,一般情况下不需要每次打开</p>\n\n<h2 id=\"去除没什么用的cpu架构\">去除没什么用的CPU架构</h2>\n<p>需要关闭该功能,在点击【开始混淆】按钮后,关闭 armv7、armv7s、arm64e就行了,现在上传应用基本上不需要出现在上传IPA里面了</p>\n","dir":"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/","name":"confuse seep.md","path":"高级技巧/confuse seep.md","url":"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/confuse%20seep.html"},{"sort":2,"layout":"default","title":"运行应用","content":"# 运行应用\n应用启动后,可能会有几种提示\n- 应用被阻止启动\n- 辅助控制提示\n\n## 应用被阻止启动\n出现这个问题的原因是因为你的隐私高级里面阻止了从其他渠道安装app,想打开这个,请访问系统**便好设置** \\ **安全性与隐私**,找到**允许从以下位置下载的App** 一栏 勾选 **App Store和被任何的开发者** 或者,我们可以用下面的命令行来允许所有从其他渠道来源下载的应用运行\n```\nsudo spctl --master-disable\n```\n\n## 打开辅助功能\n由于自定义的右键菜单等控件使用了全局监听一些鼠标事件的函数,应用启动后会提示\"crab-orange\"想要使用辅助功能来控制这台电脑,如果拒绝了一些弹窗控件的体验就会比较糟糕,想获得好一点的体验,最好根据提示允许辅助功能里面的crab-orange控制\n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-12.jpeg\" width=\"60%\">\n\n## 环境检查\n应用启动后将会出现下面这个界面,将会开始一次环境检查,把工具包依赖的的python库都安装上\n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-13.png\" width=\"60%\">\n\n针对某些机器上提示`install ccache faild`的问题,请打开终端,执行 `sudo vim /etc/crab.conf` ,然后按需拷贝下面内容,再输入 `:w` 保存\n```\nsource ~/.bash_profile#记得检查一下是否存在,不存在就不要加入\nsource ~/.zprofile#记得检查一下是否存在,不存在就不要加入\nsource ~/.zshrc#记得检查一下是否存在,不存在就不要加入\n```\n\n再点击**环境检查**按钮重新执行就行了,只有看到相关库都完成安装了,就可以了\n","dir":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/","name":"run.md","path":"新手教程/run.md","url":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/run.html"},{"sort":2,"permalink":"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/","layout":"default","title":"高级技巧","content":"<h1 id=\"高级技巧\">高级技巧</h1>\n\n<ul>\n <li><a href=\"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/extern%20SDK%20confuse.html\">外部SDK存档-混淆</a></li>\n <li><a href=\"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/confuse%20seep.html\">加快混淆速度</a></li>\n <li><a href=\"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/custom%20resource%20confuse.html\">如何混淆一个自定的格式的资源?</a></li>\n <li><a href=\"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/exclude%20JSON%20model.html\">如何避免某些对象或成员被混淆</a></li>\n <li><a href=\"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/constant%20confuse.html\">字符串常量混淆</a></li>\n</ul>\n","dir":"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/","name":"README.md","path":"高级技巧/README.md","url":"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/"},{"sort":2,"layout":"default","title":"如何混淆一个自定的格式的资源?","content":"<h1 id=\"如何混淆一个自定的格式的资源\">如何混淆一个自定的格式的资源?</h1>\n<p>有时候想混淆一个自定义个文件格式,如果操作不当就会出现问题,如果这个文件的读取操作在一个外部SDK里面,并且是c/c++方法读取的,就会出现运行时错误,就需要添加外部SDK存档-混淆来修复它</p>\n\n<h2 id=\"添加一个自定义的资源脚本\">添加一个自定义的资源脚本</h2>\n<ol>\n <li>\n <p>打开工程混淆设置,切换到【资源脚本】</p>\n </li>\n <li>\n <p>点’+’,创建一个脚本分组,设置一个名字比如说lua</p>\n </li>\n <li>\n <p>找到对应的lua分组,可以看到后缀设置,一般不需要设置,有个缺省的,假如还有一种我们自定义的lua文件后缀,比如说luao,我们也加进去,用’|’分隔就行了,不要有空格</p>\n </li>\n</ol>\n","dir":"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/","name":"custom resource confuse.md","path":"高级技巧/custom resource confuse.md","url":"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/custom%20resource%20confuse.html"},{"sort":2,"layout":"default","title":"程序运行","content":"# 程序运行\n\n1. 为什么运行检查提示ccache安装失败?\n> 主要原因就是开发机器上homebrew安装的目录问题,这些目录要么配置在`bash`下,要么配置在`zsh`下导致的,按照运行应用那个教程来操作就行了。\n>\n\n2. 启动时候报sql错误?\n> 可能你强制关闭导致了数据库损坏了,这个时候请关闭应用,然后执行 `rm ~/Library/ipa-artifact` 再重新启动应用就行了。\n```warning\n这个操作会导致你的注册码都丢失了,请重新找我们要注册码,或者请在执行删除操作前,把你的 `~/Library/ipa-artifact/packages`的字目录下后缀为.listenkey的文件拷贝到桌面\n```","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"程序运行.md","path":"常见问题/程序运行.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E7%A8%8B%E5%BA%8F%E8%BF%90%E8%A1%8C.html"},{"sort":3,"layout":"default","title":"如何上传混淆后的ipa?","content":"# 如何上传混淆后的ipa?\n**当前例子是为了提供演示如何上传ipa。**\n\n## 导出ipa和上传应用\n1. 提示混淆结束后,找到【导出文件】按钮,点击后目标选择桌面\n\n2. 找到【上传文件】按钮,点击后会出现下面界面,输入`appleId'和'专属密钥',专属密钥如何申请,请参考[Apple专用密码](https://support.apple.com/zh-cn/HT204397)\n\n3. 点击【验证应用】按钮,选择我们刚刚导出到做面的ipa文件,完成验证\n\n4. 点击【上传应用】按钮,选择我们刚刚验证的ipa文件,完成上传\n","dir":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/","name":"upload ipa.md","path":"新手教程/upload ipa.md","url":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/upload%20ipa.html"},{"sort":3,"layout":"default","title":"导入注册码","content":"# 导入注册码\n\n1. 导入的时候提示设备不匹配?\n> 因为我们有些注册码是做了设备标识的,不认识的设备,是不能安装的,主要是为了防止被工具被乱用。\n>","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"导入注册码.md","path":"常见问题/导入注册码.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E5%AF%BC%E5%85%A5%E6%B3%A8%E5%86%8C%E7%A0%81.html"},{"sort":3,"permalink":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","layout":"default","title":"常见问题","content":"<h1 id=\"常见问题\">常见问题</h1>\n\n<ul>\n <li><a href=\"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E7%A8%8B%E5%BA%8F%E5%AE%89%E8%A3%85.html\">程序安装</a></li>\n <li><a href=\"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E7%A8%8B%E5%BA%8F%E8%BF%90%E8%A1%8C.html\">程序运行</a></li>\n <li><a href=\"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E5%AF%BC%E5%85%A5%E6%B3%A8%E5%86%8C%E7%A0%81.html\">导入注册码</a></li>\n <li><a href=\"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E6%BA%90%E7%A0%81%E9%A2%84%E5%A4%84%E7%90%86.html\">源码预处理</a></li>\n <li><a href=\"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E5%88%9B%E5%BB%BA%E5%B7%A5%E7%A8%8B.html\">创建工程</a></li>\n <li><a href=\"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E4%BE%9D%E8%B5%96%E6%96%87%E4%BB%B6%E9%85%8D%E7%BD%AE.html\">依赖文件配置</a></li>\n <li><a href=\"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E7%BC%96%E8%AF%91%E8%AE%BE%E7%BD%AE.html\">编译设置</a></li>\n <li><a href=\"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E6%B7%B7%E6%B7%86%E5%BC%80%E5%A7%8B.html\">开始混淆</a></li>\n <li><a href=\"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E7%BC%96%E8%AF%91%E5%B7%A5%E7%A8%8B.html\">编译工程</a></li>\n <li><a href=\"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E6%B7%B7%E6%B7%86%E8%B5%84%E6%BA%90.html\">混淆资源</a></li>\n <li><a href=\"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E6%B7%B7%E6%B7%86%E7%9B%AE%E6%A0%87%E6%96%87%E4%BB%B6.html\">混淆目标文件</a></li>\n <li><a href=\"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E7%AD%BE%E5%90%8D.html\">签名</a></li>\n <li><a href=\"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E5%AF%BC%E5%87%BA.html\">导出IPA</a></li>\n <li><a href=\"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E8%B0%83%E8%AF%95App.html\">调试APP</a></li>\n <li><a href=\"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/CocosPods.html\">CocosPods</a></li>\n <li><a href=\"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/Swift%E6%B7%B7%E7%BC%96.html\">Swift混编</a></li>\n <li><a href=\"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E5%B8%B8%E9%87%8F%E5%8A%A0%E5%AF%86.html\">字符常量加密</a></li>\n</ul>\n","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"README.md","path":"常见问题/README.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/"},{"sort":3,"layout":"default","title":"如何避免某些对象或成员被混淆","content":"# 如何避免某些对象或成员被混淆\n**当前教程是为了让你方便的排除某些对象或者成员被改名的问题,比较经典的应用就是避免Json解析引起的Model。**\n\n## 一. 通过项目【设置】/【排除混淆-语言】设置 `All Memeber By Call `分组,来避免某些对象成员函数、属性被改名导致json解析出错\n\n一般来说除非你用的Json解析的库用的是一个.a或者.framework,你又没有做添加过这个外部SDK到项目混淆配置的【外部SDK存档-混淆】列表中,才需要通过识别调用来排除,如果添加了就不需要管了\n\n1. 首先确认工程当前工程使用那种Json解析模块,一般常用的就是YYModel和MJExtension,这两种都内置了默认配置API来解决,一般的API形式如下(具体格式请参考一些默认设置)\n```\n\t[[MyJsonObject yy_modelWithDictionary:dict]; //通过一个字典填充一个Json对象模型\n```\n上面这种如果对源码做预处理时候就会识别出MyJsonObject,并把这个标记为需要排除所有成员的名称混淆\n\n2. 检查所有模型对象,如果发现有模型对象里面包含数组,但是又没有明确数组内部成员类型,也会引起json解析错误,比如下面这个\n```\n\t@interface MyObjectA : NSObject\n\n\t@property (strong, nonatomic) NSArray* childItems;//这种源码识别程序就识别不出来,也就无法更智能标记出来把想关联的模型对象成员也排除掉\n\n\t@end\n```\n改为\n```\n\t@interface MyObjectA : NSObject\n\n\t@property (strong, nonatomic) NSArray<MyObjectB *> * childItems;//加了MyObjectB后,这个对象也会被自动排除成员名称混淆,就不会引起json解析出错\n\n\t@end\n```\n\n\n```tip\n排除设置一定要在预处理之前都设置好,如果做完了预处理再设置,就需要在重置时,勾选清除所有缓存,不然自动识别可能有误\n```\n\n## 二. 通过【排除混淆-语言】 设置 `All Member` 或 `All Member By Extend Class/Protocol` 分组来避免Json解析出错\n\n1. `All Member` 这个分组里面的,可以直接通过通配符来用名字排除,比如说如果Model都是有固定前缀或者后缀,写作**JSModel,就会都被标记出来\n\n2. `All Member By Extend ObjC Class/Protocol` 这个分组里面的表示如果某个类父类链条里面包含这个类,就会标记为排除成员,或者直接实现了某个协议的类,也会被标记出来\n","dir":"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/","name":"exclude JSON model.md","path":"高级技巧/exclude JSON model.md","url":"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/exclude%20JSON%20model.html"},{"sort":3,"layout":"default","title":"源码预处理","content":"# 源码预处理\n\n1. 提示预处理出错,是否要先去处理?\n> 代码预处理这个阶段需要识别一些常量,尽量减少一些常量的相似度,就会提示一些警告,这些警告都是可以直接忽略的,直接点继续,不解决就行了\n>\n```tip \n**更彻底的方法**:在点击【开始混淆】按钮后,找到【不处理错误】那个开关,关闭掉就行了\n```\n\n2. 在预处理阶段提示源码错误,提示 `no such file <XXXX/XXX.h>'?\n> 有些Xcode工程配置了一些.framework或者在编译期间产生的头文件,因为还未编译出来,所以当然源码预处理程序就找不到。要解决这个问题,要么把创建好的拷贝出来,放在正确的目录下,要么就点【重置】按钮,再点击【开始混淆】,关闭开关【校验源码文件】。\n>\n```tip\n关闭源码检查功能,会导致标记阶段出错,哪些出错的源码文件被忽略,这样就会导致某些字符串常量或混淆排除设置里面配置的通过函数调用来排除某些类和方法的功能失去作用。\n```\n\n3. 运行混淆后,在预处理阶段提示出错了,看错误日志提示是 `Error In Process XXXX` ?。\n> 这种是因为打开了【校验源码文件】错误,可以再点一次开始混淆继续,如果2次后,还是有些文件有问题,可以选择性排除混淆日志文件中提到的文件,或者关闭这个选项。\n>\n\n4. 为什么这个阶段我的电脑很卡?\n> 这个阶段在对所有源码做一次静态校验,并且要打一些标记,所以很吃CPU,要想不那么厉害,可以在点击【开始混淆】时那个选项卡里面,关闭【高性能模式】。","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"源码预处理.md","path":"常见问题/源码预处理.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E6%BA%90%E7%A0%81%E9%A2%84%E5%A4%84%E7%90%86.html"},{"sort":4,"layout":"default","title":"创建工程","content":"# 创建工程\n\n1. 为什么我没有workspace文件?\n> 由于目前只支持这种结构的多工程格式,所以必须要先创建一个。\n>\n\n2. 源码标识是个什么?\n> 假如你有一套源码,要上2个小包,那么创建的时候,就需要指定一个源码标识,可以避免源码预处理阶段浪费时间。\n>","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"创建工程.md","path":"常见问题/创建工程.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E5%88%9B%E5%BB%BA%E5%B7%A5%E7%A8%8B.html"},{"sort":4,"layout":"default","title":"静态分析工具使用和注意事项?","content":"# 静态分析工具使用和注意事项?\n**静态分析工具是通过对比两个ipa文件中的执行文件、资源文件相似度的工具,主要是通过符号对比、字符串对比、文件对比检测两个ipa的相似度。**\n\n## 一.如何做ipa对比\n1. 使用xcode打开准备上架的应用工程,进入工程设置,把证书和配置文件切换成AppStore证书和配置文件(Adhoc和Develement证书最终文件会有差异,后面章节会讲解)\n\n2. Xcode 菜单 Product/Archive 打包一个ipa出来,导出到桌面上(因为第一步比较简单不做过多讲解)\n\n3. 运行 crab-orange.app 混淆工具,找到【编译设置】,把证书和配置文件切换成AppStore专用的\n\n4. 混淆结束后,点击 【导出文件】 按钮,到桌面\n\n5. 在 crab-orange.app 主界面,找到【工具箱】/【对比分析】工具,双击运行\n\n6. 在界面上,会看到 `IPA.1` 和 `IPA.2` 两个文件路径输入框,点击输入框右边按钮,选对应的文件,然后点【生成报表】,选一个目录,然后等待完成就可以了\n\n## 二.敏感词的作用和使用方式?\n敏感词功能是通过给定一些需要搜索的词语(英文大小写敏感),在文件名或者执行文件中搜索相关词语,并在最终报表里面列举出来\n\n### 如何导入敏感词 ###\n1. 创建一个文本文件,每输入一个词语,换一行\n\n2. 在对比工具主界面找到敏感词设置,点击导入,选中刚才编辑的文件,完成导入\n\n### 如何导出敏感词 ###\n1. 在对比工具主界面找到敏感词设置,点击导出,选择一个目录,完成导出\n\n\n## 三.SDK设置的作用\nSDK设置的主要目的是通过预先采集一个本地SDK数据库,通过在对比分析的最终报表中把SDK中的一些干扰信息修剪掉,或者通过分析ipa调用了那些SDK得到另一种特征信息\n\n### 如何导入 ###\n针对付费版本工具作者会一般会提供一个数据库文件,包含一些常见的sdk,如果想自己增加,后面章节会讲解\n\n1. 对比工具主界面找到SDK设置,点击导入,选择给你的db文件,完成导入\n\n### 如何导出 ###\n1. 在对比工具主界面找到SDK设置,点击导出,选择一个目录,完成导出\n\n\n### 如何采集 ###\n要想自己采集,首先要注意一点,由于很多SDK会有包含现象,比如说一个libpng,能就包含zip压缩之类的,所以采集中我们要注意想得到很干净的就需要知道这些SDK的构成,通过编辑依赖文件才能做到\n\n1. 首先需要设置SDK(Root),点击输入框,右边的查找按钮,就能自动找到相关SDK目录\n\n2. 然后设置扫描目录,比如这里我们把执行文件都放在 `~/Documents/ThridSDK` 目录下,然后在`ThridSDK`目录下建立一个`Cocos2dx`目录,然后我们找一个Cocos2dx的静态库或者动态库(最好找一个静态库,动态库一般成分太复杂,会把一些静态库直接打包进去,就需要写很多依赖才能得到干净的)\n\n3. 创建一个 `~/Documents/ThreadSDK.txt` 文件,设置为依赖配置路径 ,文件格式如下\n```\nCocos2dx > libzip\n > liblua\n > libpng\n```\n\n4. 点击【开始采集】按钮,等待完成操作\n\n## 四.报表如何看? ##\n要看懂报表,首先要搞明白几个指标,分别是`内置符号`(执行文件建立的一些函数符号、静态数据符号)、`引用符号`(引用的外部SDK符号、操作系统函数符号)、`文件名`(ipa内部所有名称匹配)、`文件签名`(ipa内所有文件的md5)、`字符串`(执行文件中常量声明、界面相关文件中的常量声明)、`可执行文件`(所有可执行程序的名称)、`元数据-记录`(执行程序中的 ObjC/Swift runtime 对象/协议/扩展)、`元数据-成员`(执行文件中的 ObjC/Swift runtime 字段/方法)\n\n### 敏感词扫描了那些内容? ###\n目前敏感词只扫描了执行程序中的符号、字符串、元数据(记录/成员)、文件名,其他的文件中信息未扫描\n\n### 为什么一定要是AppStore证书? ###\n看起来只有AppStore证书打包出来的应用,包含执行程序的上传符号表,其他证书生成的ipa文件中,不包含这部分符号表,会导致最终生成的报表文件中,内置符号匹配率过高","dir":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/","name":"ipa diff tool.md","path":"新手教程/ipa diff tool.md","url":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/ipa%20diff%20tool.html"},{"sort":4,"layout":"default","title":"字符串常量混淆","content":"<h1 id=\"字符串常量混淆\">字符串常量混淆</h1>\n<p>当有需要消除应用内部字符串大量相同常量时,就需要用到这个功能,因为需要对代码中的字符串进行加密,所以一定程度上消耗程序运行性能</p>\n\n<h2 id=\"启用c风格字符串加密\">启用C风格字符串加密</h2>\n<p>需要打开该功能,需要在点击【开始混淆】按钮后,找到源码与处理-C风格字符串加密,可以顺利加密一些C风格字符串定义</p>\n\n<h2 id=\"启用oc风格字符串加密\">启用OC风格字符串加密</h2>\n<p>需要打开该功能,需要在点击【开始混淆】按钮后,找到源码与处理-OC风格字符串加密,可以顺利加密一些C风格字符串定义</p>\n\n<h2 id=\"启用swift字符串加密\">启用swift字符串加密</h2>\n<p>需要打开该功能,需要在点击【开始混淆】按钮后,找到源码与处理swift中的字符串加密,可以顺利加密一些swift字符串定义</p>\n\n<h2 id=\"启用xibstoryboard风格字符串加密\">启用xib/storyboard风格字符串加密</h2>\n<p>需要打开该功能,需要在点击【开始混淆】按钮后,找到源码与处理xib/storeborad中字符串加密,可以顺利加密一些xib/storyboard中的字符串定义</p>\n","dir":"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/","name":"constant confuse.md","path":"高级技巧/constant confuse.md","url":"/%E9%AB%98%E7%BA%A7%E6%8A%80%E5%B7%A7/constant%20confuse.html"},{"sort":5,"layout":"default","title":"依赖文件配置","content":"# 依赖文件配置\n\n1. 什么是依赖文件?\n> 当我们要对一个包,使用不同的符号表方案,生成不同的包时,比如说Icon不一样,或者某些外部配置文件不一样,我就可以把这些文件加到依赖文件设置里面,这样在打包的时候,这些内容都会被替换进去。\n>","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"依赖文件配置.md","path":"常见问题/依赖文件配置.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E4%BE%9D%E8%B5%96%E6%96%87%E4%BB%B6%E9%85%8D%E7%BD%AE.html"},{"sort":5,"layout":"default","title":"iOS 应用混淆(ObjC)","content":"# iOS 应用混淆(ObjC)\n**当前例子是为了演示objc语言开发的应用的混淆,其他语言暂不适用。**\n\n## 要运行本示例的要求\n- 安装了Cocos Pods(你工程用到了才用装)\n- 安装了 homebrew\n- 安装了 Python 3.x 版本\n- 安装了Xcode 14.x 以上\n- MacOS 10.0以上系统\n- 安装了crab-orange.app\n- 已经取得了注册码\n\n## 索要免费体验版授权码\n>请先准备一个新账号,并且创建一个应用,然后提供提供一下 bundle id\n>\n\n邮箱:**759610734@qq.com** (如果2日内未回复,请加QQ:**759610734**)\n\n## 创建工程\n1. 解压`Products.zip`,一般都会包含三个文件后缀分别是 `.listenkey` 、 `.dat` 、`.framework`\n\n2. 在工程目录 `~/Desktop/WNXHuntForCity` 下 建立一个`COSDK`目录,把我们给您的`Products/COSDK.framework`和`Products/**.dat`拖动进去\n\n3. 然后执行终端命令 `cd ~/Desktop/WNXHuntForCity`下,执行 `pod install --no-repo-update` (用了cocospods的,请执行一次)\n\n4. xcode打开 `~/Desktop/WNXHuntForCity.xcworkspace` 文件,把`COSDK`目录加入到工程里面 (实际的COSDK.framework名称跟图片可能不一致)\n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-1.png\" width=\"60%\">\n\n5. 修改一下`WNXHuntForCity.xcproject` 的 `bundle id` 改为我们给了您注册文件的那个 `bundle id`\n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-2.png\" width=\"90%\">\n\n6. 编译一次项目,确保能正确编译\n\n## 混淆器配置\n1. 打开`crab-orange.app`\n\n2. 点击`【注册码】按钮,导入我们给你的一个`Products.zip`里面`*.listenkey`文件\n\n3. 点击“新建项目”按钮,按照引导的选择对应的`~/Desktop/WNXHuntForCity/WNXHuntForCity.xcworkspace`文件,选对应的注册码,然后选主应用的target选主应用的名字,比如`WNXHuntForCity`,点击完成后创建项目成功\n\n4. 点击当前项目的最右边一个按钮,进入`WNXHuntForCity` 这个项目,等待完成工程分析(项目结构都能在界面中正确显示了)\n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-3.png\" width=\"60%\">\n>\n```warning\n如果你的项目使用了cocospod,请先执行 `pod update` 或者 `pod install` 然后再来做工程分析,并且确保你的工程可以正常编译\n```\n\n5. 退出当前项目,回到工程列表(关闭当前项目就行了),找到工程设置按钮 点进去\n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-4.png\" width=\"60%\">\n\n6. 第一个选项卡是“依赖文件”,找到`COSDK`那个分组,点` '+' `按钮,依次把`~/WNXHuntForCity/WNXHuntForCity/COSDK`里面3个文件加入进去\n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-5.png\" width=\"90%\">\n\n7. 进入【编译设置】选项卡,添加一个`Debug`证书设置,target选择`WNXHuntForCity`,`bundle id`使用您新应用的`bundle id`(注意一定要正确,不然会影响查找本地 mobile provision file文件错误),`certificate` 选正确的证书,然后点 `mobile provision file` 旁边的搜索按钮,可以从本地识别对应的文件) \n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-11.png\" width=\"60%\">\n>\n```warning\n1.使用了 `Xcode`中 `Signing & Capabilities` 里的`Automatically manage signing` 使用账号自动签名的记得关闭,不然会引起编译错误。\n2.使用了 `Xcode`中 `Signing & Capabilities` 里的 `xcode sign in with Apple`,但是你的mobileprofile里面没有打开支持的,在编译阶段会报错,请删除掉。\n3.混淆程序执行后,在编译阶段失败后,可以通过打开Xcode工程,查看签名设置,如果发现不对,可以修改混淆程序中的配置,在点击【开始混淆】(切勿直接修改Xcode工程,避免导致需要点击重置按钮重新开始)\n```\n\n8. 进入【依赖文件】在`*.xcassets` 分组里面点“+” 把icon所在的xcassets `images.xcassets` 加入,然后在 `*.plist` 分组里面点 `\"+\"` 把 `~/Desktop/WNXHuntForCity/info.plist` 加入进来,就会发现应用的icon和相关信息更新了(依赖文件的作用就是创建差异化的文件资源,假如一个应用有多个马甲,这个依赖文件就是差异化的配置,不同的包用不同的依赖文件)\n>\n```tip\n这一部分是可选的\n```\n\n\n9. 点击【开始混淆】按钮,会弹出运行设置,默认【调试模式】是打开的\n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-26.png\" width=\"90%\">\n\n10. 确保【swift混编】是关闭的,没有用到混编就不需要了\n\n11. 关闭【COSDK使用动态库】,只有你的`Podfile`里面用了`use_frameworks!` 才需要打开\n\n12. 打开【COSDK自动初始化】,打开后就可以开启运行时的自动修复功能,避免出现一些运行错误(请去掉main.m里面的NSCOSDK_Init()部分)\n\n13. 修改【COSDK自定义名称】为给你的`Products.zip`里面的那个framework的名字(如果是COSDK,可以不填写)\n\n14. 确保只打开【ARM64】指令,之后出正式版本才需要加上ARMv7,其他几种指令集的也没有太多必要了\n\n15. 在预处理结束后,你应该会看到如下这张截图,点击解决问题,程序会挂起,这是你会发现警告消息里面,多了一堆警告,并且常量识别里面多了一堆常量,这些警告都是预处理阶段【工程配置】-【常量识别】里面配置的一些识别函数调用时引起,检测到了不确定的变量值,目前来说只有keyvalue需要你特别关注一下,常量识别的作用是帮助你识别一些文件名/图片名/ObjC类型名/ObjC协议名/ObjC方法名称,降低执行文件中的常量相似度,当然即使某些地方用了变量拼接这些名词,也无所谓,在应用执行时`COSDK`会修复这些名称错误\n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-7.png\" width=\"60%\">\n\n16. 点击【开始混淆】混淆,然后一直等到混淆器提示混淆完成,点击【打开工程】按钮,准备运行应用,会发现 `WNXHuntForCity`那个下拉框打开后,会多一个target,它的icon上面有一个阻止的标示,选中它,会自动安装应用到手机,就可以开始调试了\n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-8.png\" width=\"80%\">\n>\n```tip\n 如果你的手机不是arm64架构的,想调试的时候新版本的Xcode是会提示无法安装的,请更换一个arm64架构的手机调试(安装不影响)\n```\n","dir":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/","name":"iOS App confuse(ObjC).md","path":"新手教程/iOS App confuse(ObjC).md","url":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/iOS%20App%20confuse(ObjC).html"},{"sort":6,"layout":"default","title":"iOS 应用混淆(Swift)","content":"# iOS 应用混淆(Swift)\n**当前例子是为了演示swift语言开发的应用的混淆,其他语言暂不适用。**\n\n## 要运行本示例的要求\n- 安装了Cocos Pods(你工程用到了才用装)\n- 安装了 homebrew\n- 安装了 Python 3.x 版本\n- 安装了Xcode 14.x 以上\n- MacOS 10.0以上系统\n- 安装了crab-orange.app\n- 已经取得了注册码\n\n## 索要免费体验版授权码\n>请先准备一个新账号,并且创建一个应用,然后提供提供一下 bundle id\n>\n\n邮箱:**759610734@qq.com** (如果2日内未回复,请加QQ:**759610734**)\n\n## 创建工程\n1. 解压`Products.zip`,一般都会包含三个文件后缀分别是 `.listenkey` 、 `.dat` 、`.framework`\n\n2. 在工程目录 `~/Desktop/WNXHuntForCity` 下 建立一个`COSDK`目录,把我们给您的`Products/COSDK.framework`和`Products/**.dat`拖动进去\n\n3. 然后执行终端命令 `cd ~/Desktop/WNXHuntForCity`下,执行 `pod install --no-repo-update` (用了cocospods的,请执行一次)\n\n4. xcode打开 `~/Desktop/WNXHuntForCity.xcworkspace` 文件,把`COSDK`目录加入到工程里面 (实际的COSDK.framework名称跟图片可能不一致)\n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-1.png\" width=\"60%\">\n\n5. 修改一下`WNXHuntForCity.xcproject` 的 `bundle id` 改为我们给了您注册文件的那个 `bundle id`\n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-2.png\" width=\"90%\">\n\n6. 编译一次项目,确保能正确编译\n\n## 混淆器配置\n1. 打开`crab-orange.app`\n\n2. 点击【注册码】按钮,导入我们给你的一个`Products.zip`里面`*.listenkey`文件\n\n3. 点击“新建项目”按钮,按照引导的选择对应的`~/Desktop/WNXHuntForCity/WNXHuntForCity.xcworkspace`文件,选对应的注册码,然后选主应用的target选主应用的名字,比如`WNXHuntForCity`,点击完成后创建项目成功\n\n4. 点击当前项目的最右边一个按钮,进入`WNXHuntForCity` 这个项目,等待完成工程分析(项目结构都能在界面中正确显示了)\n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-3.png\" width=\"60%\">\n>\n```warning\n如果你的项目使用了cocospod,请先执行 `pod update` 或者 'pod install` 然后再来做工程分析,并且确保你的工程可以正常编译\n```\n\n5. 退出当前项目,回到工程列表(关闭当前项目就行了),找到工程设置按钮点进去\n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-4.png\" width=\"60%\">\n\n6. 第一个选项卡是“依赖文件”,找到`COSDK`那个分组,点` '+' `按钮,依次把`~/WNXHuntForCity/WNXHuntForCity/COSDK`里面3个文件加入进去\n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-5.png\" width=\"90%\">\n\n7. 进入【编译设置】选项卡,添加一个`Debug`证书设置,target选择`WNXHuntForCity`,`bundle id`使用您新应用的`bundle id`(注意一定要正确,不然会影响查找本地 `mobile provision file`文件错误),`certificate `选正确的证书,然后点 mobile provision file 旁边的搜索按钮,可以从本地识别对应的文件) \n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-11.png\" width=\"90%\">\n>\n```warning\n1.使用了 `Xcode`中 `Signing & Capabilities` 里的`Automatically manage signing` 使用账号自动签名的记得关闭,不然会引起编译错误。\n2.使用了 `Xcode`中 `Signing & Capabilities` 里的 `xcode sign in with Apple`,但是你的mobileprofile里面没有打开支持的,在编译阶段会报错,请删除掉。\n3.混淆程序执行后,在编译阶段失败后,可以通过打开Xcode工程,查看签名设置,如果发现不对,可以修改混淆程序中的配置,在点击【开始混淆】(切勿直接修改Xcode工程,避免导致需要点击重置按钮重新开始)\n```\n\n8. 点击【开始混淆】按钮,会弹出运行设置,默认【调试模式】是打开的\n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-26.png\" width=\"90%\">\n\n9. 打开【COSDK自动初始化】,就能省略在`main`函数里面加入`NSCOSDKInit()` 的部分,因为 swift 也找不到`main`函数定义\n\n10. 修改【COSDK自定义名称】为给你的`Products.zip`里面的那个framework的名字(如果是COSDK,可以不填写)\n\n11. 打开【swift混编】,避免提示找不到一些swift库\n\n12. 确保关闭 【COSDK使用动态库】,如果你用了`Podfile`,打开了 `use_frameworks!`,就需要对应打开这个\n\n13. 在架构里面,只打开ARM64 就可以了,然后点击【开始混淆】\n\n14. 再次点击【开始混淆】按钮,然后一直等到混淆器提示混淆完成,点击【打开工程】按钮,准备运行应用,会发现 `WNXHuntForCity` 那个下拉框打开后,会多一个target,它的icon上面有一个阻止的标示,选中它,会自动安装应用到手机,就可以开始调试了\n>\n<img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-8.png\" width=\"80%\">\n>\n```tip\n 如果你的手机不是arm64架构的,想调试的时候新版本的Xcode是会提示无法安装的,请更换一个arm64架构的手机调试(安装不影响)\n```","dir":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/","name":"iOS App confuse(Siwft).md","path":"新手教程/iOS App confuse(Siwft).md","url":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/iOS%20App%20confuse(Siwft).html"},{"sort":6,"layout":"default","title":"编译设置","content":"# 编译设置\n\n1. 为什么`target-name`那个下拉框里面,什么都没有?\n> 没能找到`target-name`,是因为你没有进入过 混淆程序当前包的`工程 `页面,所以没能分析出工程信息。\n>\n\n2. 搜索证书配置里,为什么列不出任何 `mobile-provision-file` 文件?\n> 没能找到`mobile-provision-file`文件,请检查你的bundle id是否设置错误。\n>\n\n3. certificate 和 identify 怎么选才对?\n>如果你的证书是 `Apple Development:` 开头,identify也请选 'Apple Development' 同理,发布证书也一样。\n>\n\n4. 一定要有`debug`么?\n>如果你为了快速验证,可以不要`debug`设置,直接添加`release`,然后在点击【开始混淆】后,记得关闭`调试模式`选项。\n>","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"编译设置.md","path":"常见问题/编译设置.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E7%BC%96%E8%AF%91%E8%AE%BE%E7%BD%AE.html"},{"sort":7,"layout":"default","title":"Unity 项目混淆","content":"<h1 id=\"unity-项目混淆\">Unity 项目混淆</h1>\n<p><strong>当前例子是为了演示unity3d的混淆。</strong></p>\n\n<h2 id=\"要运行本示例的要求\">要运行本示例的要求</h2>\n<ul>\n <li>安装了Unity Hub</li>\n <li>安装了Unity</li>\n <li>安装了Python 3.x</li>\n <li>安装了pip</li>\n <li>MacOS 10.0以上系统</li>\n <li>安装了crab-orange.app</li>\n <li>已经取得了注册码</li>\n</ul>\n\n<h2 id=\"索要免费体验版授权码\">索要免费体验版授权码</h2>\n<blockquote>\n <p>请先准备一个新账号,并且创建一个应用,然后提供提供一下 bundle id</p>\n\n</blockquote>\n\n<p>邮箱:<strong>759610734@qq.com</strong> (如果2日内未回复,请加QQ:<strong>759610734</strong>)</p>\n\n<h2 id=\"创建工程\">创建工程</h2>\n<ol>\n <li>\n <p>解压<code class=\"language-plaintext highlighter-rouge\">Products.zip</code>,一般都会包含三个文件后缀分别是 <code class=\"language-plaintext highlighter-rouge\">.listenkey</code> 、 <code class=\"language-plaintext highlighter-rouge\">.dat</code> 、<code class=\"language-plaintext highlighter-rouge\">.framework</code></p>\n </li>\n <li>\n <p>打开<code class=\"language-plaintext highlighter-rouge\">~/Desktop/TEST-U3D/Unity-iPhone.xcodeproj</code>,把我们给您的<code class=\"language-plaintext highlighter-rouge\">Products/COSDK.framework</code>(名字以给你的为准) 和<code class=\"language-plaintext highlighter-rouge\">Procucts/*.dat</code> 文件加到<code class=\"language-plaintext highlighter-rouge\">~/Desktop/TEST-U3D</code> 目录下</p>\n </li>\n <li>\n <p>在Xcode的左侧工程视图里面,找到<code class=\"language-plaintext highlighter-rouge\">Unity-iPhone</code>,右键菜单<code class=\"language-plaintext highlighter-rouge\">Add Files To \"Unity-iPhone\"</code>,把<code class=\"language-plaintext highlighter-rouge\">~/Desktop/TEST-U3D/COSDK</code>加入</p>\n </li>\n <li>\n <p>点击<code class=\"language-plaintext highlighter-rouge\">Xcode</code>中<code class=\"language-plaintext highlighter-rouge\">Unity-iPhone</code>这个工程文件 找到 TARGETS 里面的 <code class=\"language-plaintext highlighter-rouge\">Unity-iPhone</code>,在<code class=\"language-plaintext highlighter-rouge\">Framework Search Paths</code>里面添加 <code class=\"language-plaintext highlighter-rouge\">\"$(PROJECT_DIR)/COSDK\"</code></p>\n </li>\n <li>\n <p>在 <code class=\"language-plaintext highlighter-rouge\">Unity-iPhone</code>的 <code class=\"language-plaintext highlighter-rouge\">Build Phases/Link Binary With Libraries</code>里面加入<code class=\"language-plaintext highlighter-rouge\">COSDK.framework</code></p>\n </li>\n <li>\n <p>点击<code class=\"language-plaintext highlighter-rouge\">Xcode</code>中<code class=\"language-plaintext highlighter-rouge\">Unity-iPhone</code>这个工程文件 找到 TARGETS 里面的 <code class=\"language-plaintext highlighter-rouge\">UnityFramework</code>,在Framework Search Paths里面添加<code class=\"language-plaintext highlighter-rouge\"> \"$(PROJECT_DIR)/COSDK\"</code></p>\n </li>\n <li>\n <p>在 <code class=\"language-plaintext highlighter-rouge\">UnityFramework</code> 的 <code class=\"language-plaintext highlighter-rouge\">Build Phases/Link Binary With Libraries</code>里面也加入<code class=\"language-plaintext highlighter-rouge\">COSDK.framework</code></p>\n </li>\n <li>\n <p>更改<code class=\"language-plaintext highlighter-rouge\">Unity-iPhone</code>这个Target的<code class=\"language-plaintext highlighter-rouge\">bundle id</code>,与您新应用的<code class=\"language-plaintext highlighter-rouge\">bundle id</code>一致</p>\n </li>\n <li>\n <p>在AppStore上为<code class=\"language-plaintext highlighter-rouge\">UnityFramework</code>创建一个单独的<code class=\"language-plaintext highlighter-rouge\">bundle id</code>(这个会单独签名,之后混淆器的编译设置里面需要设置单独的签名设置,需要在一个证书内)</p>\n </li>\n <li>\n <p>确保Xcode能正常编译</p>\n </li>\n</ol>\n\n<h2 id=\"混淆器配置\">混淆器配置</h2>\n<ol>\n <li>\n <p>打开<code class=\"language-plaintext highlighter-rouge\">crab-orange.app</code></p>\n </li>\n <li>\n <p>点击【注册码】,导入<code class=\"language-plaintext highlighter-rouge\">Products/*.listenkey</code>文件,记住注册码</p>\n </li>\n <li>\n <p>点击【创建工程】创建一个混淆工程,因为没有<code class=\"language-plaintext highlighter-rouge\">*.xcworkspace</code>,所以先点<code class=\"language-plaintext highlighter-rouge\">?</code>按钮创建一个</p>\n </li>\n <li>回到主页面找到点【配置】按钮,把<code class=\"language-plaintext highlighter-rouge\">~/Desktop/TEST-U3D/COSDK</code> 目录里3个文件添加到依赖配置的<code class=\"language-plaintext highlighter-rouge\">COSDK</code>分组下 (COSDK.framework名字可能跟截图不一致)\n <blockquote>\n\n <p><img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-5.png\" width=\"90%\" /></p>\n </blockquote>\n </li>\n <li>配置编译设置,添加一个<code class=\"language-plaintext highlighter-rouge\">Debug</code>签名,Target选择<code class=\"language-plaintext highlighter-rouge\">Unity-iPhone</code>(如果下拉列表是空的,先进一下工程,等待工程分析结束,再返回配置界面),bundle id输入您新应用的bundle id\n <blockquote>\n\n <p><img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-11.png\" width=\"90%\" /></p>\n\n<pre><code class=\"language-warning\">1.使用了 `Xcode`中 `Signing & Capabilities` 里的`Automatically manage signing` 使用账号自动签名的记得关闭,不然会引起编译错误。\n2.使用了 `Xcode`中 `Signing & Capabilities` 里的 `xcode sign in with Apple`,但是你的mobileprofile里面没有打开支持的,在编译阶段会报错,请删除掉。\n3.混淆程序执行后,在编译阶段失败后,可以通过打开Xcode工程,查看签名设置,如果发现不对,可以修改混淆程序中的配置,在点击【开始混淆】(切勿直接修改Xcode工程,避免导致需要点击重置按钮重新开始)\n</code></pre> \n </blockquote>\n </li>\n <li>点击【开始混淆】按钮\n <blockquote>\n\n <p><img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-26.png\" width=\"90%\" /></p>\n </blockquote>\n </li>\n <li>\n <p>打开 【调试模式】选项,打开【COSDK使用动态库】和 【COSDK自动初始化】</p>\n </li>\n <li>\n <p>修改【COSDK自定义名称】为给你的<code class=\"language-plaintext highlighter-rouge\">Products.zip</code>里面的那个framework的名字(如果是COSDK,可以不填写)</p>\n </li>\n <li>等混淆结束后,点击打开工程按钮,准备运行应用,会发现 <code class=\"language-plaintext highlighter-rouge\">Unity-iPhone</code> 那个下拉框打开后,会多一个target,它的icon上面有一个阻止的标示,选中它,会自动安装应用到手机,就可以开始调试了(类似下图)\n <blockquote>\n\n <p><img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-8.png\" width=\"80%\" /></p>\n\n<pre><code class=\"language-tip\"> 如果你的手机不是arm64架构的,想调试的时候新版本的Xcode是会提示无法安装的,请更换一个arm64架构的手机调试(安装不影响)\n</code></pre> \n </blockquote>\n </li>\n</ol>\n","dir":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/","name":"Unity project confuse.md","path":"新手教程/Unity project confuse.md","url":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/Unity%20project%20confuse.html"},{"sort":7,"layout":"default","title":"开始混淆","content":"# 开始混淆\n\n1. 提示未设置签名?\n> 进入工程设置-编译设置,添加2个签名设置,一个Debug,一个Release都要设置好。\t每个签名有对应的bundle id和configure以及mobileprofile文件,点击搜索按钮一般能识别出来,如果识别不出来,请先登录账号下载相关证书和配置文件\t\n>\n\n2. 提示未设置COSDK依赖文件?\n> 进入工程设置-依赖文件,把COSDK目录下的2个文件,分别加入配置\n>\n\n3. 为什么没有显示正确的Icon?\n> 进入工程设置-依赖文件,找到*.xcassets中,看看有没有配置,然后再确认一下AppIcon目录下有没有文件,默认查找的AppIcon目录,如果你在工程里面配置的不是这个,请换名字.\n> \n\n4. 提示什么源码文件冲突\n> 这是因为在同一个target下有多个同名但是后缀不相同的文件,这些文件在编译后产生.o文件,混淆程序匹配不上,所以只要改一下名字就行了。\n\n5. 提示找不到资源文件?\n> 请先点击【重置】按钮,然后打开Xcode项目,检查一下资源是否存在,因为在混淆过程中,如果Xcode打开了当前项目,就会导致工程文件被Xcode保存,导致混淆程序的存档恢复功能无效。\n> \n\n6. 提示找不到依赖文件?\n> 依赖文件设置里面的内容可能发生了变化,可以重新添加,解决问题。\n> ","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"混淆开始.md","path":"常见问题/混淆开始.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E6%B7%B7%E6%B7%86%E5%BC%80%E5%A7%8B.html"},{"sort":8,"layout":"default","title":"cocos2d-x 项目混淆","content":"<h1 id=\"cocos2d-x-项目混淆\">cocos2d-x 项目混淆</h1>\n<p><strong>当前例子是为了演示cocos2d-x的混淆。</strong></p>\n\n<h2 id=\"要运行本示例的要求\">要运行本示例的要求</h2>\n<ul>\n <li>安装了cocos-2dx</li>\n <li>安装了Python 3.x</li>\n <li>安装了pip</li>\n <li>MacOS 10.0以上系统</li>\n <li>安装了crab-orange.app</li>\n <li>已经取得了注册码</li>\n</ul>\n\n<h2 id=\"安装cocos-2dx\">安装cocos-2dx</h2>\n<ul>\n <li>访问 https://www.cocos.com 登录您的账号</li>\n <li>进入产品/cocos2d-x 下载,比如找到V3.17.2,下载到桌面</li>\n</ul>\n\n<h2 id=\"索要免费体验版授权码\">索要免费体验版授权码</h2>\n<blockquote>\n <p>请先准备一个新账号,并且创建一个应用,然后提供提供一下 bundle id</p>\n\n</blockquote>\n\n<p>邮箱:<strong>759610734@qq.com</strong> (如果2日内未回复,请加QQ:<strong>759610734</strong>)</p>\n\n<h2 id=\"配置-cocos-2dx-工程\">配置 cocos-2dx 工程</h2>\n<ol>\n <li>进入<code class=\"language-plaintext highlighter-rouge\">~/Desktop/cocos2d-x-3.17.2</code>目录,把我们提供给您的<code class=\"language-plaintext highlighter-rouge\">COSDK.framework</code>和<code class=\"language-plaintext highlighter-rouge\">**.dat</code> 文件拷贝到 <code class=\"language-plaintext highlighter-rouge\">cocos/COSDK</code> 目录下\n <blockquote>\n\n <p><img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-16.png\" width=\"90%\" /></p>\n </blockquote>\n </li>\n <li>\n <p>打开<code class=\"language-plaintext highlighter-rouge\">~/Desktop/cocos2d-x-3.17.2/build/cocos2d_tests.xcodeproj</code></p>\n </li>\n <li>在<code class=\"language-plaintext highlighter-rouge\">Xcode</code>的左侧工程视图里面,找到<code class=\"language-plaintext highlighter-rouge\">tests</code>,右键菜单<code class=\"language-plaintext highlighter-rouge\">Add Files To \"cocos2dx-tests\"</code>,选中<code class=\"language-plaintext highlighter-rouge\">cocos/COSDK</code> 目录\n <blockquote>\n\n <p><img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-15.png\" width=\"90%\" /></p>\n </blockquote>\n </li>\n <li>\n <p>点击<code class=\"language-plaintext highlighter-rouge\">Xcode</code>中<code class=\"language-plaintext highlighter-rouge\">cocos2d_tests</code>这个工程文件 找到 TARGETS 里面的 <code class=\"language-plaintext highlighter-rouge\">cpp-tests IOS</code>,在<code class=\"language-plaintext highlighter-rouge\">Framework Search Paths</code>里面添加 <code class=\"language-plaintext highlighter-rouge\">\"$(SRCROOT)/../cocos/COSDK\"</code></p>\n </li>\n <li>更改<code class=\"language-plaintext highlighter-rouge\">cocos2d-x</code>工程中<code class=\"language-plaintext highlighter-rouge\">cpp-tests</code>这个Target的<code class=\"language-plaintext highlighter-rouge\">bundle id</code>,与您新应用的<code class=\"language-plaintext highlighter-rouge\">bundle id</code>一致\n <blockquote>\n\n <p><img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-14.png\" width=\"90%\" /></p>\n </blockquote>\n </li>\n</ol>\n\n<h2 id=\"混淆器配置\">混淆器配置</h2>\n<ol>\n <li>\n <p>打开<code class=\"language-plaintext highlighter-rouge\">crab-orange.app</code></p>\n </li>\n <li>\n <p>解压缩我们给你的 <code class=\"language-plaintext highlighter-rouge\">Products.zip</code> 文件</p>\n </li>\n <li>\n <p>找到【注册码】按钮,点击进入注册码管理</p>\n </li>\n <li>\n <p>导入 <code class=\"language-plaintext highlighter-rouge\">Products/*.listenkey</code>文件,记住编号</p>\n </li>\n <li>\n <p>点击【创建工程】,因为没有<code class=\"language-plaintext highlighter-rouge\">*.xcworkspace</code>的原因,所以我们要点<code class=\"language-plaintext highlighter-rouge\">'?'</code>按钮创建一个</p>\n </li>\n <li>\n <p>选中对应的工程,选好正确的target和注册码编号</p>\n </li>\n <li>回到主页面找到配置按钮,把<code class=\"language-plaintext highlighter-rouge\">~/Desktop/cocos2d-x-3.17.2/cocos/COSDK</code>目录里3个文件添加到依赖配置的<code class=\"language-plaintext highlighter-rouge\">COSDK</code>分组下\n <blockquote>\n\n <p><img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-5.png\" width=\"90%\" /></p>\n </blockquote>\n </li>\n <li>配置【编译设置】,添加一个<code class=\"language-plaintext highlighter-rouge\">Debug</code>签名,Target选择<code class=\"language-plaintext highlighter-rouge\">cpp-tests-iOS</code>(如果下拉列表是空的,先进一下工程,等待工程分析结束,再返回配置界面),<code class=\"language-plaintext highlighter-rouge\">bundle id</code>是您新应用的<code class=\"language-plaintext highlighter-rouge\">bundle id</code>\n <blockquote>\n\n <p><img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-11.png\" width=\"90%\" /></p>\n\n<pre><code class=\"language-warning\">1.使用了 `Xcode`中 `Signing & Capabilities` 里的`Automatically manage signing` 使用账号自动签名的记得关闭,不然会引起编译错误。\n2.使用了 `Xcode`中 `Signing & Capabilities` 里的 `xcode sign in with Apple`,但是你的mobileprofile里面没有打开支持的,在编译阶段会报错,请删除掉。\n3.混淆程序执行后,在编译阶段失败后,可以通过打开Xcode工程,查看签名设置,如果发现不对,可以修改混淆程序中的配置,在点击【开始混淆】(切勿直接修改Xcode工程,避免导致需要点击重置按钮重新开始)\n</code></pre> \n </blockquote>\n </li>\n <li>如果是<code class=\"language-plaintext highlighter-rouge\">cocos-js/cocos-lua/quick-cocos</code> 开发的游戏项目,请找工程设置的【外部SDK存档-混淆】,如果是 js开发的应用找到请找到 <code class=\"language-plaintext highlighter-rouge\">cocos2d-x</code>引擎目录下的 <code class=\"language-plaintext highlighter-rouge\">external/spidermonkey/prebuilt/ios/libjs_static.a</code> 添加进去(这个操作是为了能拦截<code class=\"language-plaintext highlighter-rouge\">libjs_static.a</code>里面的一些文件读取操作api让混淆资源脚本能正确解码混淆后的js文件),然后到【资源脚本】里面,添加一个js文件的脚本,这个脚本会对.js文件内容做一次加密。lua开发的应用就需要找到对应的<code class=\"language-plaintext highlighter-rouge\">external/lua/luajit/prebuilt/ios/liblua.a</code> 或者<code class=\"language-plaintext highlighter-rouge\">external/lua/luajit/prebuilt/ios/libluajit.a</code>\n <blockquote>\n\n<pre><code class=\"language-tip\">因为大部分项目都有自己的脚本加密方案在POST_BUILD阶段替换,所以需要修改一下js脚本的混淆操作发生时机,在【资源脚本】/【lua 脚本定义】 里面修改`confuse-script-phase` 为 `copy-resource` 就可以了\n</code></pre> \n </blockquote>\n </li>\n <li>点击【开始混淆】按钮\n <blockquote>\n\n <p><img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-26.png\" width=\"90%\" /></p>\n </blockquote>\n </li>\n <li>\n <p>打开 【调试模式】 选项,打开【COSDK自动初始化】</p>\n </li>\n <li>\n <p>修改【COSDK自定义名称】为给你的<code class=\"language-plaintext highlighter-rouge\">Products.zip</code>里面的那个framework的名字(如果是COSDK,可以不填写)</p>\n </li>\n <li>等混淆结束后,点击打开工程按钮,准备运行应用,会发现 <code class=\"language-plaintext highlighter-rouge\">build all tests iOS</code> 那个下拉框打开后,会多一个target,它的icon上面有一个阻止的标示,选中它,会制动安装应用到手机,就可以开始调试了(类似下图)\n <blockquote>\n\n <p><img src=\"https://outtable.github.io/9live/assets/images/snapshots/snapshot-8.png\" width=\"80%\" /></p>\n\n<pre><code class=\"language-tip\"> 如果你的手机不是arm64架构的,想调试的时候新版本的Xcode是会提示无法安装的,请更换一个arm64架构的手机调试(安装不影响)\n</code></pre> \n </blockquote>\n </li>\n</ol>\n","dir":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/","name":"cocos2d-x project confuse.md","path":"新手教程/cocos2d-x project confuse.md","url":"/%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B/cocos2d-x%20project%20confuse.html"},{"sort":8,"layout":"default","title":"编译工程","content":"# 编译工程\n\n1. 编译出错提示提示不支持armv7 ?\n> 首先确认是不是设置的最低iOS版本号要求的问题,最低armv7从iOS13后拿掉了,然后再确定一下 Xcode 工程设置里面 **Build Settings** 里面的 **ARCHS** 有没有加armv7\n>\n\n2. 编译的时候报“Reason: The run destination Generic iOS Device is not valid for Running the XXXXX”\n> 注意,因为Debug模式下,会帮你覆盖原来的scheme设置,帮助安装和调试应用的,一般来说恢复程序会帮你恢复,但是也有例外,如果你这个scheme以前没有,就会恢复不了了,就会影响你使用,解决方法也简单,删掉你的 \n>\n\n3. 编译阶段提示 xcodebuild: error: The workspace named \"XXXX\" does not contain a scheme named \"XXXX\". The \"-list\" option can be used to find the names of the schemes in the workspace.\n> 这是因为你的项目没有scheme导致的,请先打开工程文件,选择new scheme,创建一个与XXXX相同的scheme,就可以了(如果有这个但是依然报这个错误,先关闭xcode,然后右键你的*。xcproject工程文件,显示包内容,然后删除里面的xcshareddata和xcuserdata目录,然后再打开xcode,创建这个 XXXX scheme就可以了)\n>\n\n4. 在程序的最后链接阶段,提示找不到某些符号?\n> 发生这个问题,最先要考虑的就是原始工程是否能正常编译?点击【重置】按钮,恢复一下,然后打开Xcode工程编译看看。\n>\n\n5. 编译的时候报找不到 XXXX scheme\n> 请先去确认你的Xcode里面有没有该Scheme ,没有先创建一个,如果是Debug模式下,请确认该Scheme没有勾选shared模式\n>\n\n14. 为什么明明在识别常量里面出现了的资源,也做了改名,但是在运行时找不到?\n> 先看看当前工程的所有项目里面资源里面,搜索在调试时出现问题的那个代码文件,看看它前面有没有 C(confuse) 标示,如果没有标记,最好去掉那个资源的R(rename)标记。\n>\n\n15. 运行混淆后,在混淆目标文件阶段提示失败,看日志文件里面,提示link-symbol-error \n> 这是因为在运行混淆设置里面,默认是打开了检查链接符号错误,在确保没有问题的情况下,可以关闭该选项。\n>\n\n16. 运行混淆后,在预处理阶段提示出错了,看错误提示是 Error In Process XXXX。\n> 这种是因为打开了 检查源文件错误,可以再点一次开始混淆继续,如果2次后,还是有些文件有问题,可以选择性排除混淆日志文件中提到的文件,或者关闭这个选项。\n>\n\n17. 手机无法调试?\n> 先确定一下你的手机架构是不是ARM64,否则Xcode不支持,请更换一个机器 \n>\n\n18. 混淆时候报 symbol-convert-check-error?\n> 这是因为你点开始混淆的时候,打开了【校验符号转换】功能,关闭就行了,因为有些符号在做转换校验,结果发现不认识,就会提醒一下!","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"编译工程.md","path":"常见问题/编译工程.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E7%BC%96%E8%AF%91%E5%B7%A5%E7%A8%8B.html"},{"sort":9,"layout":"default","title":"混淆资源","content":"# 混淆资源\n\n1.提示找不到资源文件?\n> 请先点击【重置】按钮,然后打开Xcode项目,检查一下资源是否存在,因为在混淆过程中,如果Xcode打开了当前项目,就会导致工程文件被Xcode保存,导致混淆程序的存档恢复功能无效。\n> ","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"混淆资源.md","path":"常见问题/混淆资源.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E6%B7%B7%E6%B7%86%E8%B5%84%E6%BA%90.html"},{"sort":10,"layout":"default","title":"混淆目标文件","content":"# 混淆目标文件\n\n1. 为什么明明在识别常量里面出现了的资源,也做了改名,但是在运行时找不到?\n> 先看看当前工程的所有项目里面资源里面,搜索在调试时出现问题的那个代码文件,看看它前面有没有 C(confuse) 标示,如果没有标记,最好去掉那个资源的R(rename)标记。\n>\n\n2. 运行混淆后,在混淆目标文件阶段提示失败,看日志文件里面,提示link-symbol-error \n> 这是因为在运行混淆设置里面,默认是打开了检查链接符号错误,在确保没有问题的情况下,可以关闭该选项。\n>\n\n3. 混淆时候报 symbol-convert-check-error?\n> 这是因为你点开始混淆的时候,打开了【校验符号转换】功能,关闭就行了,因为有些符号在做转换校验,结果发现不认识,就会提醒一下!","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"混淆目标文件.md","path":"常见问题/混淆目标文件.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E6%B7%B7%E6%B7%86%E7%9B%AE%E6%A0%87%E6%96%87%E4%BB%B6.html"},{"sort":11,"layout":"default","title":"签名","content":"# 签名\n","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"签名.md","path":"常见问题/签名.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E7%AD%BE%E5%90%8D.html"},{"sort":12,"layout":"default","title":"导出IPA","content":"# 导出IPA\n\n1. 导出文件按钮点击后里面的一些dSYM目录下是什么?\n> 这里面都是原始符号表,只有正式版有这个功能。这些符号表可以提交到`bugly`之类的平台来做线上崩溃日志分析。\n>\n\n2.为什么我导出的文件夹中没有dSYM目录\n>因为你用的是免费体验版本,请购买正式版本。\n>","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"导出.md","path":"常见问题/导出.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E5%AF%BC%E5%87%BA.html"},{"sort":13,"layout":"default","title":"调试APP","content":"# 调试APP\n\n1. 手机无法调试?\n> 先确定一下你的手机架构是不是ARM64,否则Xcode不支持,请更换一个机器 \n>","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"调试App.md","path":"常见问题/调试App.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E8%B0%83%E8%AF%95App.html"},{"sort":14,"layout":"default","title":"CocosPods","content":"<h1 id=\"cocospods\">CocosPods</h1>\n\n<ol>\n <li>pod install失败了?\n <blockquote>\n <p>请先【重置】恢复到原始工程,然后pod install试试,有些就是项目生成的pod太久了。</p>\n\n </blockquote>\n </li>\n <li>我需不需要 pod install?\n <blockquote>\n <p>使用了CocosPod的项目,请在混淆工程先,执行一下这个命令,确保工程能正常编译过,并且保证Pods创建的工程没问题。</p>\n\n </blockquote>\n </li>\n <li>错误日志里面提示 <code class=\"language-plaintext highlighter-rouge\">请移除Podfile中的 :generate_multiple_pod_projects 字段</code>?\n <blockquote>\n <p>请彻底移除Podfile文件里面这个字段,目前暂未支持这种工程结构,不要采用注释,而是彻底从文件中删除。</p>\n\n </blockquote>\n </li>\n</ol>\n","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"CocosPods.md","path":"常见问题/CocosPods.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/CocosPods.html"},{"sort":15,"layout":"default","title":"Swift混编","content":"<h1 id=\"swift混编\">Swift混编</h1>\n\n<ol>\n <li>为什么打开了【生成swift混编头文件】后源码预处理阶段提示搜索不到framework?\n <blockquote>\n <p>先检查一下报错日志,先确定一下,是不是因为找不到某些swift生成的framework,因为有些项目喜欢使用编译时构造framework,由于源码预处理是静态检查,不会生成这些动态结构的framework文件。所以最快方法就是关闭这个。同时关闭【校验源码错误】并打开【保持APP文件名】开关。</p>\n\n </blockquote>\n </li>\n <li>为什么关闭了【生成swift混编头文件】后源码预处理阶段提示<code class=\"language-plaintext highlighter-rouge\">XXX/XXX-Bridging-Header.h</code>文件找不到了?\n <blockquote>\n <p>这种情况是因为混淆程序会改变APP的<code class=\"language-plaintext highlighter-rouge\">PRODUCT_NAME</code>,就会导致没有生成对应的头文件,要想解决这个问题,请打开【保持APP文件名】开关。</p>\n\n </blockquote>\n </li>\n</ol>\n","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"Swift混编.md","path":"常见问题/Swift混编.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/Swift%E6%B7%B7%E7%BC%96.html"},{"sort":16,"layout":"default","title":"字符常量加密","content":"# 字符常量加密\n\n1. 常量加密有什么用?\n> 可以隐藏某些功能的关键字,避免被扫描到。\n>\n\n2. 为什么打开这个功能后有某些源码文件编译不过?\n> 这种情况下,请把该文件的相对路径加到混淆配置【排除文件-膨胀】里面(可以通过右键 膨胀-排除 解决)\n> \n\n3. 哪些情况下会引起编译错误?\n> 在 .m/.mm/.cpp/.c 文件中,函数定义中的 static NSString* a = @\"aaa\"; 这种形式的定义,都会引起编译错误,要解决的方法就是找到相应的源码文件,去掉(I)标识就可以(可以通过右键 膨胀-排除 解决)\n> 而在.swift文件中,当string和NSString的类型推断引起了编译错误时,也是一样会导致编译错误,需要去掉(I)标识\n> \n\n4. 会有常量加密不充分的情况么?\n> 会有这种情况,比如在 ObjC/cpp/c 里面在宏定义中的字符串常量,就不会被加密,或者有 static NSString* a = \"MyStr\"; 这种形式的定义,也不会被加密,这种情况下,要么修改源码,要么去掉源码的(I)标识\n> ","dir":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/","name":"常量加密.md","path":"常见问题/常量加密.md","url":"/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/%E5%B8%B8%E9%87%8F%E5%8A%A0%E5%AF%86.html"}]