Guideline 2.5.1 - Performance - Software Requirements

 

Guideline 2.5.1 - Performance - Software Requirements


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.

If there are no alternatives for providing the functionality your app requires, you can file an enhancement request.



Since your App Store Connect status is Rejected, a new binary will be required.

 

/**
 判断网络状态

 @return <#return value description#>
 */
- (BOOL)judgeNetStatus{
    
    
    [SVProgressHUD setMinimumDismissTimeInterval:2];
    AppDelegate * appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
    
    if ([appDelegate.network isEqualToString:NETUnknownSign] || [appDelegate.network isEqualToString:NETNoSign]) {
//        [SVProgressHUD setMinimumDismissTimeInterval:2];
//        [SVProgressHUD showInfoWithStatus:@"无网络信号,请检查网络设置!"];
        NSURL *url = [NSURL URLWithString:@"App-Prefs:root=MOBILE_DATA_SETTINGS_ID"];
//        NSURL * url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
        
        NSString *app_Name = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"];
        
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"请允许网络访问" message:[NSString stringWithFormat:@"请在系统的设置-%@-无线数据",app_Name] preferredStyle:UIAlertControllerStyleAlert];
        if([[UIApplication sharedApplication] canOpenURL:url]) {
            [alertController addAction:[UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
                [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) {
                    
                }];
            }]];
            [alertController addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action){
                
            }]];
        }else{
            [alertController addAction:[UIAlertAction actionWithTitle:@"我知道了" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action){
               
            }]];
        }
        [self presentViewController:alertController animated:YES completion:nil];
        
        
//        NSURL*url=[NSURL URLWithString:@"Prefs:root=Privacy&path=LOCATION"];
//
//        // !!!关键代码!!!跟之前的写法也不一样了!!!
//        Class LSApplicationWorkspace = NSClassFromString(@"LSApplicationWorkspace");
//        [[LSApplicationWorkspace performSelector:@selector(defaultWorkspace)] performSelector:@selector(openSensitiveURL:withOptions:) withObject:url withObject:nil];
//        1

        
        
        return NO;
    }
    
    
    return YES;
    
}

 

app里面代码调用了私有库:

将类似这段私有api
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=LOCATION_SERVICES"]];
NSURL *url = [NSURL URLWithString:@"App-Prefs:root=MOBILE_DATA_SETTINGS_ID"];
NSURL *url = [NSURL URLWithString:@"APP-Prefs:root=WIFI"];
换成下面的
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

NSURL * url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

 

 

附:

iOS 10 跳转系统设置的字段

电池电量 Prefs:root=BATTERY_USAGE
通用设置 Prefs:root=General
存储空间 Prefs:root=General&path=STORAGE_ICLOUD_USAGE/DEVICE_STORAGE
蜂窝数据 Prefs:root=MOBILE_DATA_SETTINGS_ID
Wi-Fi 设置 Prefs:root=WIFI
蓝牙设置 Prefs:root=Bluetooth
定位设置 Prefs:root=Privacy&path=LOCATION
辅助功能 Prefs:root=General&path=ACCESSIBILITY
关于手机 Prefs:root=General&path=About
键盘设置 Prefs:root=General&path=Keyboard
显示设置 Prefs:root=DISPLAY
声音设置 Prefs:root=Sounds
App Store 设置 Prefs:root=STORE
墙纸设置 Prefs:root=Wallpaper
打开电话 Mobilephone://
世界时钟 Clock-worldclock://
闹钟 Clock-alarm://
秒表 Clock-stopwatch://
倒计时 Clock-timer://
打开相册 Photos://
/* *********************** 此方法APP审核会被拒*********************** */

苹果的要求是不可以再使用prefs:root以及App-Prefs:root的接口来做app内部和系统设置的跳转了。现在做app系统设置跳转,官方的只能使用UIApplicationOpenSettingURLString.

并且,明确一点,就是打开url的api也是需要做适配的。

if ([UIDevice currentDevice].systemVersion.floatValue > 10.0) {
            if( [[UIApplication sharedApplication] canOpenURL:url] ) {
                [[UIApplication sharedApplication] openURL:url options:@{}completionHandler:^(BOOL  success) {
                    
                }];
            }
        }else{
            NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
            if( [[UIApplication sharedApplication] canOpenURL:url] ) {
                [[UIApplication sharedApplication] openURL:url options:@{}completionHandler:^(BOOL  success) {
                    
                }];
            }
        }

 

最后一点:

一些网站上说使用prefs:root配合在info.plist上加入URL scheme值为prefs:的方案可以解决这个上架被拒的问题。但是经过我自己的测试,现在“prefs:root”是苹果不允许的,而且这个在info.plist中加入URL scheme值为prefs:也是不可以的。

也就是说使用“prefs:root”做跳转 以及 在info.plist中加入URL scheme值为prefs:,这两者,只要存在其中一项都会被app store拒绝的。

把原本在info.plist中的prefs去掉之后,就上架成功了!

 

当前iOS10/9支持的所有跳转,亲测可用(测试系统:10.2.1  9.3.2)

 

跳转写法
无线局域网App-Prefs:root=WIFI
蓝牙App-Prefs:root=Bluetooth
蜂窝移动网络App-Prefs:root=MOBILE_DATA_SETTINGS_ID
个人热点App-Prefs:root=INTERNET_TETHERING
运营商App-Prefs:root=Carrier
通知App-Prefs:root=NOTIFICATIONS_ID
通用App-Prefs:root=General
通用-关于本机App-Prefs:root=General&path=About
通用-键盘App-Prefs:root=General&path=Keyboard
通用-辅助功能App-Prefs:root=General&path=ACCESSIBILITY
通用-语言与地区App-Prefs:root=General&path=INTERNATIONAL
通用-还原App-Prefs:root=Reset
墙纸App-Prefs:root=Wallpaper
SiriApp-Prefs:root=SIRI
隐私App-Prefs:root=Privacy
SafariApp-Prefs:root=SAFARI
音乐App-Prefs:root=MUSIC
音乐-均衡器App-Prefs:root=MUSIC&path=com.apple.Music:EQ
照片与相机App-Prefs:root=Photos
FaceTimeApp-Prefs:root=FACETIME

转载于:https://www.cnblogs.com/gongyuhonglou/p/9375936.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值