苹果私有 API 检查工具开源项目 - V2EX
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 6170 次点击
    这是一个创建于 3622 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 站的头像规则。。 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     Solana     953 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:44 PVG 06:44 LAX 15:44 JFK 18:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86