App Store 被拒绝记录
一、私有API
1、审核被拒描述:
Your app uses or references the following non-public APIs:
PrivateFrameworks/CameraUI.framework(CAMImagePickerCameraViewController
PUUIMomentsGridViewController,PUUIAlbumListViewController
The use of non-public APIs is not permitted on the App Store because it can lead to a poor user experience should these APIs change.
Continuing to use or conceal non-public APIs in future submissions of this app may result in the termination of your Apple Developer account,as well as removal of all associated apps from the App Store.
Next Steps
If you are using third-party libraries,please update to the most recent version of those libraries. If you do not have access to the libraries' source,you may be able to search the compiled binary using the "strings" or "otool" command line tools. The "strings" tool can output a list of the methods that the library calls and "otool -ov" will output the Objective-C class structures and their defined methods. These tools can help you narrow down where the problematic code resides. You could also use the "nm" tool to verify if any third-party libraries are calling these APIs.
2、说明:
因为产品需求在指定的编辑界面和相机、相册、录制视频界面,不能弹出推送弹窗,
所以项目中用到了如下的3个类:
系统相机SDK界面:
PrivateFrameworks/CameraUI.framework(CAMImagePickerCameraViewController)
系统相册SDK界面
PUUIMomentsGridViewController,PUUIAlbumListViewController
3、解决办法:
将使用到此地方代码删除
二、私有URL scheme
1、审核被拒描述:
Your app uses the "prefs:root=" non-public URL scheme,which is a private entity. The use of non-public APIs is not permitted on the App Store because it can lead to a poor user experience should these APIs change.
Continuing to use or conceal non-public APIs in future submissions of this app may result in the termination of your Apple Developer account,as well as removal of all associated apps from the App Store.
Next Steps
To resolve this issue,please revise your app to provide the associated functionality using public APIs or remove the functionality using the "prefs:root" or "App-Prefs:root" URL scheme.
2、说明:
由于之前项目是企业版证书打包给客户用的,所以之前所有涉及到相机、相册、麦克风等权限的地方,都用到了"prefs:root="进行跳转到具体的设置界面。
3、解决办法:
办法1:
将所有跳转都去除,统一提示即可!
办法2:
//iOS10
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"prefs:root=WIFI"] options:@{} completionHandler:nil];
//
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"prefs:root=WIFI"]];
中间进行一个转码,绕过苹果的代码扫描,亲测能过审核.
//将上面的跳转字符串转成字符,在进行拼接就好了
NSData*encryptString = [[NSDataalloc] initWithBytes:(unsignedchar[]){0x70,0x72,0x65,0x66,0x73,0x3a,0x72,0x6f,0x6f,0x74,0x3d,0x4e,0x4f,0x54,0x49,0x46,0x49,0x43,0x41,0x54,0x49,0x4f,0x4e,0x53,0x5f,0x49,0x44} length:27];
NSString*string = [[NSStringalloc] initWithData:encryptString encoding:NSUTF8StringEncoding];
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:string] options:@{} completionHandler:nil];
给一个转换的网站
办法3:
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; if([[UIApplicationsharedApplication]canOpenURL:url]) {
[[UIApplicationsharedApplication]openURL:url];
}
三、相关资料
1、审核被拒描述:
CoreData.framework/CoreData,[NSManagedObject allocWithEntity:],[NSManagedObject allocBatch:withEntity:count:]
2、查看相关网址
苹果审核指南中文版:
https://developer.apple.com/cn/app-store/review/guidelines/
苹果审核联系方式
https://developer.apple.com/contact/#!/topic/select
4006701855苹果开发者热线停止服务后如何联系苹果客服入口介绍
https://blog.csdn.net/xxw888/article/details/80609501
App 被拒选择回复还是重新提审,如何选择最高效的应对方式?
https://mp.weixin.qq.com/s/B5KRyWeghNX25AKez0fV1Q
iOS私有Api检测
https://blog.csdn.net/shmilycoder/article/details/81070140
关于苹果私有API的查找和使用
https://blog.csdn.net/ergoucheng/article/details/44454853
纪念一下我的第一次因为私有API被拒(检查私有API配置的方法)
https://www.jianshu.com/p/921a8b2315ce
四、常见命令查找指定私有库
1、strings命令使用
进入到ipa包里面的app文件夹目录下,使用如下命令:
xxx表示ipa包名,yyy表示具体提示的私有api
strings - -a -arch armv7“xxx”| grep yyy
strings - -a -arch armv7 "JZGDetectionPlatformForOffice" | grep NSManagedObject
//txt文件会在.app里面
strings - -a -arch armv7 "JZGDetectionPlatformForOffice" > test.txt
2、otool命令的使用:
otool -tV XXX
otool -l XXX
nm -px XXX. -p原始顺序,不做symbol字母或者数字排序。-x 16进制表示
nm -ov XXX
xxx为二进制文件全路径,比如:
otool -ov /Users/husj/Desktop/企业包/JZGDetectionPlatformForOffice\ 2018-08-15\ 10-26-19-线上App\ Store6-2.2.1/Payload/JZGDetectionPlatformForOffice.app/JZGDetectionPlatformForOffice
3、grep命令的使用:
find . | grep -v .svn | grep "\.a" | grep -v "\.app" | xargs grep NSManagedObject allocWithEntity
4、审核被拒,直接回复苹果格式参考:
这里是与苹果沟通时的回复模板,大家可以借鉴
格式一:【元数据被拒绝时】
尊敬的苹果开发者审核您好;
我方已修正贵方所提出问题,
请重新审核;
诚挚的问候!
格式二:【二进制被拒绝时】
IPv6 等内容的回复:
尊敬的苹果开发者审核;
您好,我方已在服务端修复此问题,
请重新审核;
诚挚的问候
格式三:【二进制被拒绝时】
Bug 等内容的回复:
尊敬的苹果开发者审核您好;
我方已修正贵方所提出问题,
请重新审核;
诚挚的问候!
尊敬的苹果开发者审核您好;
此app,之前一直是用企业证书发布给员工使用的,由于公司业务发展,现在需要上传到App Store。
前几天,已经提交几次被拒绝,通知我们使用了私有api,我们都找到具体使用私有api的地方,并修改后重新提交了。
这一次拒绝说使用了私有api,CoreData.framework/CoreData,[NSManagedObject allocWithEntity:],[NSManagedObject allocBatch:withEntity:count:]
但是我们经过多种方法尝试,无法定位到什么地方使用了这个私有api,希望审核团队,能给我们提供下具体信息,方便我们修改后重新提交!
谢谢!
诚挚的问候!
五、app审核联系苹果对应的翻译:
https://developer.apple.com/contact/app-store/?topic=clarification
六、参考相关被拒原因
App Store 审核 金融App 3.2.1被拒及其他23种原因总结
网友评论