V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
50vip
V2EX  ›  Python

苹果私有 API 检查工具开源项目

  •  
  •   50vip · 2015-11-17 19:05:11 +08:00 · 5811 次点击
    这是一个创建于 3329 天前的主题,其中的信息可能已经有所发展或是发生改变。

    iOS 私有 API 检查工具

    iOS-private-api-checker 苹果 iOS 私有 API 检查工具 Developer tool to scan iOS apps for private API usage before submitting to Apple https://github.com/hustcc/iOS-private-api-checker
    私有 API 检查的原因在于:苹果在 app 提审的时候,会检查 app 使用私有 api 的情况,对于使用了私有 api 的 app ,不予通过,这个工具的目地就是在提审之前检查一下,提高通过率。

    一、功能

    目前功能主要有以下:

    1. 从 ipa 中提取一些基本信息,例如 app 名字, sdk 版本,包名等,可以辅助 QA 日常工作。
    2. ipa 架构检查,可以看出是否支持 64 位架构,可以辅助 AppStore 提审。
    3. ipa 使用私有 api 情况,可以辅助 AppStore 提审。
    4. ipa info 和 provision 配置项的检查,获得授权设备 udid (参考项目 iOS-checkIPA )。
    5. 获取签名信息。
    6. 批量检查 APP ,并生成 excel 报告,截图见下方。

    二、如何使用

    1. 构建私有 api 库

    • db/dsidx_dbs.py 文件为解析 docSet.dsidx 的库,请实现将 docSet.dsidx 内容导出到 sqlite 中。 docSet.dsidx 是 xcode 作为代码提示的数据库,表示是 apple 公开的公有 api 。

    • 修改 config.py 中 sdks_config 字典,增加各个 version 的 sdk 路径,然后运行 build_api_db.py ,会自动解析私有 api ,存存储到 sqlite 中。

    • (项目中的数据库内容是我编译 sdk7.0 的数据,可以直接用。)

    2. 检查 ipa 私有 api

    运行方式有二,建议第二种 web 方式:

    1. 修改 iOS_private.py main 方法中的 ipa 路径,运行即可。

    2. 使用 Web 上传运行的方式,运行 python run_web.py (请先配置 flask 运行环境),然后浏览器输入 127.0.0.1:9527 将 ipa 拖入上传框等待即可看到检查结果。

    3. 使用 batch_check 方法批量运行目录中的 ipa ,并生成 excel 报告。

    三、 Screenshot

    • 网页检查展示

    web_screenshot

    • 批量检测生成 excel 报告概要

    excel_report_outline

    • excel 报告详细页

    excel_report_detail

    四、参考项目

    五、 Note

    1. 私有的 api = (class-dump Framework 下的库生成的头文件中的 api - (Framework 下的头文件里的 api = 有文档的 api + 没有文档的 api)) + PrivateFramework 下的 api
    2. 私有 api 在公开的 Framework 及私有的 PrivateFramework 都有。
    3. 请暂时暂 mac 上运行, linux 上暂时没有找到合适的、代替 otool 的工具,求推荐^^!
    22 条回复    2015-11-19 13:38:39 +08:00
    levyleo
        1
    levyleo  
       2015-11-17 19:19:36 +08:00
    markmark
    evakiss
        2
    evakiss  
       2015-11-17 19:20:12 +08:00
    楼主,头像是你吗
    50vip
        3
    50vip  
    OP
       2015-11-17 19:23:52 +08:00
    @evakiss 是啊是啊,相信吗?
    Elethom
        4
    Elethom  
       2015-11-17 19:26:31 +08:00
    Application Loader 不是會檢查麼。
    evakiss
        5
    evakiss  
       2015-11-17 19:30:45 +08:00
    @50vip 当然相信咯,而且楼主还玩贴吧啊 http://tieba.baidu.com/p/1603683320
    50vip
        6
    50vip  
    OP
       2015-11-17 19:34:21 +08:00
    @evakiss 哈哈~
    typcn
        7
    typcn  
       2015-11-17 20:10:14 +08:00
    在上传二进制文件的时候,提交审核之前,就会检查私有 API 的使用情况,在提交审核之后不会检查的。

    而且想要绕过是非常简单的。。。通过云端的配置文件控制开关,从服务器上动态下载二进制文件并加载执行
    mzer0
        8
    mzer0  
       2015-11-17 20:16:05 +08:00 via iPhone
    @typcn 苹果不是做了限制吗
    ileenhow
        9
    ileenhow  
       2015-11-17 20:41:31 +08:00
    楼主,头像真的是你吗
    secondwtq
        10
    secondwtq  
       2015-11-17 21:29:40 +08:00
    @typcn iOS App 允许执行动态生成 /获取的代码?
    ddqp
        11
    ddqp  
       2015-11-17 21:39:56 +08:00
    就想知道头像是谁,老司机??
    palxex
        12
    palxex  
       2015-11-17 22:03:32 +08:00
    @secondwtq 不允许,但它得能检查出来啊。。。它要是能检查出来 surge 都别想上线。
    50vip
        13
    50vip  
    OP
       2015-11-18 09:21:42 +08:00
    @typcn 配置开关的问题一旦查出来,该帐号下面的所有 app 估计都有有影响,我们现在都不做开关了~
    xuzhongzhou
        14
    xuzhongzhou  
       2015-11-18 10:04:46 +08:00
    @typcn “从服务器上动态下载二进制文件并加载执行”这个是不可行的, App Store 重签名后,你自己的二进制没办法和 App 的签名一致,跑不起来。
    typcn
        15
    typcn  
       2015-11-18 10:08:26 +08:00 via iPhone
    @xuzhongzhou dylib , bundle ,甚至直接把 binary 从服务器读取下来并在内存中执行,不写入文件都是可以的


    @50vip 然而 qq 微信支付婊淘宝都有这样的开关....也没见管过
    50vip
        16
    50vip  
    OP
       2015-11-18 10:25:11 +08:00
    @typcn appstore 本身很多条款都是模拟两可,很抽象的,比如:开关不行,但是打 patch 却是可以的,实际上两者并没有什么鸟区别。
    至于哪些公司可以,哪些公司不可以,看和编辑的眼缘了~~
    xuzhongzhou
        17
    xuzhongzhou  
       2015-11-18 10:47:09 +08:00
    @typcn 哦,好吧,我果然还是太实诚了,说的只是 iOS 8 新增的那个动态库能否运行的时候下载下来加载了跑。
    zsj950618
        18
    zsj950618  
       2015-11-18 21:46:07 +08:00
    头像。。。真的是真的吗。。。。
    V 站的头像规则。。 https://www.v2ex.com/t/62637
    hqs123
        19
    hqs123  
       2015-11-19 08:11:15 +08:00
    刚接触苹果开发,学习下
    MrMign
        20
    MrMign  
       2015-11-19 12:12:52 +08:00 via iPhone
    参考项目的一个链接没有→_→
    50vip
        21
    50vip  
    OP
       2015-11-19 13:37:47 +08:00
    @zsj950618 不是真的,但是是我女朋友,可以吗~
    50vip
        22
    50vip  
    OP
       2015-11-19 13:38:39 +08:00
    @MrMign 这个文章是直接 github 项目的 README ,那个链接是一个相对链接,所以它找不到,请到 github 上看~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1149 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 18:25 · PVG 02:25 · LAX 10:25 · JFK 13:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.