加载的步骤为:

1.创建Xib
2.往xib当中拖入一个View.
3.设置Xib的file's owner类型为要设置的那个控制器.
4.把View与file's owner连线.    (注意, 只有设置了file's owner类型才能够进行拖线.)

initWithNibName:为要加载的Xib的名称.
 MyViewController *vc = [[MyViewController alloc] initWithNibName:@"VC" bundle:nil];

xib使用注意事项:

1.如果一个view从xib中加载,就不能用[xxx alloc] init] 和 [xxx alloc] initWithFrame:]创建
2.如果一个xib经常被使用,应该提供快速构造类方法
3.如果一个view从xib中加载:
      用代码添加一些子控件,得在 initWithCoder: 和 awakeFromNib 创建
4.如果一个view从xib中加载,会调用initWithCoder: 和 awakeFromNib,不会调用init和initWithFrame:方法

1.创建窗口
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
2.加载控制器
从StoryBoard当中加载控制器
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
加载剪头指向的控制器
UIViewController *vc = [storyBoard instantiateInitialViewController];
3.设置窗口根控制器
self.window.rootViewController = vc;
4.显示窗口
[self.window makeKeyAndVisible];


加载控制器的两种方式

0.加载指定的StoryBoard.
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
1.加载箭头所指向的控制器.
UIViewController *vc = [storyBoard instantiateInitialViewController];
2.加载指定标识的控制器.
 UIViewController *vc = [storyBoard         
                           instantiateViewControllerWithIdentifier:@"idCongtroler"];

UIWindow是一种特殊的UIView,通常在一个app中至少有一个UIWindow
iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,
最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了
一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow

在加载info.plist,判断下是否指定main,如果指定了,就会去加载StoryBoard.
    1.创建一个窗口
    2.加载MainStoryBoard,初始化一个控制器.
    3.把初始化出来的控制器设置为窗口的根控制器.让窗口显示到屏幕上.

如果没有指定Mian话, 那这个时候就需要我们手动的去创建窗口.
当info.plist文件没有找到的时候,那么程序就加载完毕,那么在程序加载完毕时要自己手动去创建窗口.

在开发当中,通常都是手动去创建窗口.

1.创建窗口,要有窗口显示,必须要有强引用.窗口也是控件,要想展示出来.必须得要有尺寸.
      self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
2.创建控制器
    会把控制器的View添加到窗口上.并且有一个旋转的功能.
    UIViewController *vc = [[UIViewController alloc] init];
    vc.view.backgroundColor = [UIColor redColor];

3.设置控制器为窗口的根控制器
    self.window.rootViewController = vc;
4.显示窗口
    [self.window makeKeyAndVisible];



在设置rootViewController的时候,会把控制器的View添加到窗口上面.
[self.window makeKeyAndVisible]的底层实现:
    1.让窗口成为显示状态.
      窗口默认是隐藏的.hidden = yes.
      底层做的事件就是:
       self.window.hidden = NO;

    2.把当前窗口设置成应用程序的主窗口
       application.keyWindow获得应用程序的主窗口.



在程序当中,状态栏和键盘,它都属性是一个窗口.可以通过打印的方式来验证.
设置window的层级.UIWindowLevelNormal它是一个CGFloat类型.
self.window.windowLevel = UIWindowLevelNormal
UIWindowLevelNormal < UIWindowLevelStatusBar < UIWindowLevelAlert

UIApplication功能

1.设置应用提醒数字
    获取UIApplication对象
    UIApplication *ap = [UIApplication sharedApplication];

    在设置之前, 要注册一个通知,从ios8之后,都要先注册一个通知对象.才能够接收到提醒.
    UIUserNotificationSettings *notice = [UIUserNotificationSettings   
        settingsForTypes:UIUserNotificationTypeBadge categories:nil];
    注册通知对象
    [ap registerUserNotificationSettings:notice];
    设置提醒数字
    ap.applicationIconBadgeNumber = 10;
2.设置连网状态
   ap.networkActivityIndicatorVisible = YES;
3.设置状态栏
    应用程序的状态栏,默认是交给控制器来管理的.
    控制器提供的方法,可以直接重写这个方法
    在控制器当中设置状态栏样式
    -(UIStatusBarStyle)preferredStatusBarStyle{
        return UIStatusBarStyleLightContent;
    }

    隐藏状态栏,通过控制器的方式.同样实现方法:
    返回NO时为不隐藏
    返回YES时为隐匿
    -(BOOL)prefersStatusBarHidden{
        return NO;
    }

    通常在开发当中都是应用程序来管理状态栏的.来做统一管理,不然的话, 会有很多个控制器.会非常的麻烦.
    想要让应用程序管理状态栏,要在info.plist当中进行配置,
    添加一个key值:是最后一个,View controller-based status bar appearance
    设置为NO.就是应用程序来管理了.

    通过UIApplication来管理状态.
    1.获取UIApplication
    UIApplication *ap = [UIApplication sharedApplication];
    2.设置状态栏样式.
    ap.statusBarStyle = UIStatusBarStyleLightContent;
    3.设置状态的隐藏
    ap.statusBarHidden = YES;


4.跳转网页
    UIApplication *ap = [UIApplication sharedApplication];
    URL:协议头://域名
    应用程序通过协议头的类型,去打开相应的软件.
    NSURL *url =[NSURL URLWithString:@"http://www.baidu.com"];
    [ap openURL:url];

UIApplication代理和程序的启动流程.

所有的移动操作系统都有个致命的缺点:app很容易受到打扰。比如一个来电或者锁屏会导致app进入后台甚至被终止
还有很多其它类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统事件,
这时UIApplication会通知它的delegate对象,让delegate代理来处理这些系统事件

delegate可处理的事件包括:
应用程序的生命周期事件(如程序启动和关闭)
系统事件(如来电)
内存警告
...

UIApplication会在程序一启动时候创建一个遵守UIApplicationDelegate代理.
这个就是我们程序一创建时的AppDelegate类.AppDelegate就是遵守了UIApplicationDelegate协议.
在这个类中很定义很多监听系统事件的方法.同时也定义了一些应用程序的生命周期方法.

主要方法有:

 应用程序的生命周期
 应用程序启动完成的时候调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSLog(@"%s",__func__);
    return YES;
}

 当我们应用程序即将失去焦点的时候调用
- (void)applicationWillResignActive:(UIApplication *)application {
    NSLog(@"%s",__func__);
}

 当我们应用程序完全进入后台的时候调用
- (void)applicationDidEnterBackground:(UIApplication *)application{
   NSLog(@"%s",__func__);
}

 当我们应用程序即将进入前台的时候调用
- (void)applicationWillEnterForeground:(UIApplication *)application {
  NSLog(@"%s",__func__);}

 当我们应用程序完全获取焦点的时候调用
 只有当一个应用程序完全获取到焦点,才能与用户交互.
- (void)applicationDidBecomeActive:(UIApplication *)application {
    NSLog(@"%s",__func__);
}

 当我们应用程序即将关闭的时候调用
- (void)applicationWillTerminate:(UIApplication *)application {
   NSLog(@"%s",__func__);
}

2.应用程序的程动原理

    程序启动时执行main函数,在main函数当中有以下操作.
    int main(int argc, char * argv[]) {
      @autoreleasepool {
        第三个参数:UIApplication类名或者子类的名称 nil == @"UIApplication"
        第四个参数:UIApplication的代理的代理名称
           NSStringFromClass:把类名转化字符串
        NSStringFromClass好处:1.有提示功能 2.避免输入错误
       return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
      }

    }

底层原理为:
    1.根据principalClassName传递的类名创建UIApplication对象
    2.创建UIApplication代理对象,给UIApplication对象设置代理
    3.开启主运行事件循环,处理事件,保持程序一直运行.
    4.加载info.plist,判断下是否指定main,如果指定了,就会去加载StoryBoard.

01-项目中常见的文件(LaunchScreen)

Xcode5
    框架是苹果事先已经导入进去的.在项目的结构当中就能够看到导入的框架.

Xcode6
    会自动导入一些觉见的框架.在项目结构当中,看不到已经导入的框架.
    LaunchScreen.xib:用来设置启动界面.
Xcode7
    会自动导入一些觉见的框架.在项目结构当中,看不到已经导入的框架.
    LaunchScreen.storyBoard

LaunchScreen原理:
    会自动加载LaunchScreen是因为在Target当中,指定了Launch Screen file,
    如果没有指定的话,就不会去加载LaunchScreen作为启动界面.

    如果没有设置启动图片,模拟器默认的尺寸大小是4s的尺寸大小.(可以打印屏幕尺寸验证.)
    模拟器默认的尺寸是由启动界面决定的.
    它的底层实现其实把LaunchScreen上的东西,生成了一张图片,然后把这张图片设为程序的启动图片.
    可以进入沙盒当中查看, 
    查看方法,找到应用程序根目录.
    获取方法: NSLog(@"%@",NSHomeDirectory());
    打印出来,后前往文件夹.找到Library->Caches->Snapshots目录下面.最后一层就是程序自动生成的图片.

02-项目中常见的文件(info.plist)

Supporting file一般都是放些资源文件,像一些plist这些等.
xcode5当中也有info.plist,只不过它的名字很长.是工程的名称.
在xcode5当中,会自动生成一个pch文件,在Xcode6当中不会帮我们生成PCH文件.

info.plist当中保存着整个应用当中基本的配置.它是一个字典.查看它的类型.
这个当中,主要掌握三个Key,
Bundle Name:应用程序的名称.
Bundle version string,short:应用程序的版本.在开发当中都是迭代开发.苹果要求下一次提交的版本必须得要比上一次提交的版本要高.

Bundle Version:应用程序编译的版本.
Bundle identifier:应用程序标识符.保证应用程序的唯一性, 
                   如果两个应用同一个标识符, 那么之前的那个应用会被干掉.
                   作用:上传到AppStore的时候必须得要有标识符.
                           当做推送的时候也必须得要Bundle identifier.
Targets对应者info.plist.文件.    

03-项目中常见的文件(PCH)

PCH也是一个文件.一般PCH的名称跟项目的名称相同.
PCH的作用:存放一些公用的宏.
          存放一些公用的文件.
只要在pch当中定义的东西, 会被整个应用程序共享.
PCH它是一个预编译文件,要告诉系统要提前编译它.要去做一些配置.
在Buld Setting 当中找perfix 找到Precomplie prefix Header 为yes.
设完这些后,再进行prefix Header的路径配置.路径从根层开始.

1.定义一些常用公用的宏.
经常做一些系统的版本号的宏,
和一些屏幕的宏.

2.存放公用的头文件.分类的头文件
3.pch可以自定义Log.
    在宏当中,三个点...表示可变参数.
    在函数当中,表示可变参数用:__VA_ARGS__
    XMGLog(...) NSLog(__VA__ARGS__)

    可以手动管理,直接注释掉.

PCH:注意PCH会把它当中的所有内容导入到工程当中所有的文件.但如果工程当中有C语言文件的时候,它也是会把它给导入到C语言的文件当中.如果这样的话, 就会发生错误.

解决办法:每一个OC文件都会定义一个__OBJC__宏,只要判断有没有定义这样一个宏,
        就能看出是不是C语言的文件,如果没有定义这样的宏, 那就不需要导入这些东西.就不会报错.

将其放到下面目录下就可以了:如图/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
这个是xcode8运行iOS10所必须具有的文件夹。 Xcode7在相同路径下添加此文件夹即可

图

iOS 10的一大变化是更强的隐私数据保护。在文档中是这么描述的:

You must statically declare your app’s intended use of protected data classes by including the appropriate purpose string keys in your Info.plist file.

简单的说访问用户数据都需要现在Info.plist中声明,否则会crash
这些用户数据包括:

Contacts, Calendar, Reminders, Photos, Bluetooth Sharing, Microphone, Camera, Location, Health, HomeKit, Media Library, Motion, CallKit, Speech Recognition, SiriKit, TV Provider.

10之前只需要获取位置时配置,现在更严格了,比如需要调用相册访问权限,也需要在Info.plist中配置privacy。
好在这些key的名字在Xcode 8中已经有了自动补全。添加一个属性,输入Privacy后就会出现自动提示:

图1

后面填的string会在弹出用户允许时展示在描述里。如果描述空着提交AppStore时会拒绝。

图2

应用被拒分为两种:Binary Rejected 和 Metadata Rejected。前者需要重新上传应用并且重新排队,后者只需要修改信息,不需要重新上传应用。

1、应用内包含检查更新功能

iOS 应用的版本更新必须通过 App Store 进行,自身 App 内不能包含提示更新功能。从2015年3月起,所有包含检查更新功能的 App 都会被拒绝上架。

附被拒理由原文:

Your app includes an update button or alerts the user to update the app. To avoid user confusion, app version updates must utilize the iOS built-in update mechanism. We’ve attached screenshot(s) for your reference.

Please remove the update feature from your app. To distribute a new version of your app, upload the new app binary version into the same iTunes Connect record you created for the app’s previous version. Updated versions keep the same Apple ID, iTunes Connect ID (SKU), and bundle ID as the original version, and are available free to customers who purchased a previous version.

2、使用第三方登录时未做安装检测

接入第三方登录要检测是否安装了第三方客户端,未安装时不要显示对应按钮。2015年9月之前,通常可以采用判断未安装则隐藏登录按钮的方式。但目前隐藏按钮的方式也可能被审核拒绝,QQ 和微博提供了 web 登录的方式,如果判断未安装,需要允许用户使用 webview 的登录方式。苹果在条款中有声明不允许 iOS 应用的正常使用需要依赖另外一个 App。

附被拒理由原文:

We noticed that third-party app QQ/WeChat is required to use third-party authentication method. The user should be able to login without installing additional applications. 

If you choose to support third-party authentication, please use methods that can authenticate users from within your app, such as a native web-view.

3、采集设备IDFA但应用没有广告功能

从2014年2月起,Apple 开始拒绝采集 IDFA (identifier for advertising) 却未集成任何广告服务的应用进入 App Store。如果 App 本身没有广告,ASO100.com 建议可以在审核的时候显示一个 Banner 广告,并且放在比较明显的位置,审核通过后关掉即可。

附被拒理由原文:

We found that your app uses the iOS Advertising Identifier but does not include ad functionality. This does not comply with the terms of the iOS Developer Program License Agreement, as required by the App Store Review Guidelines. 

Specifically, section 3.3.12 of the iOS Developer Program License Agreement states: 

“You and Your Applications (and any third party with whom you have contracted to serve advertising) may us the Advertising Identifier, and any information obtained through the use of the Advertising Identifier, only for the purpose of serving advertising. If a user resets the Advertising Identifier, then You agree not to combine, correlate, link or otherwise associate, either directly or indirectly, the prior Advertising Identifier and any derived information with the reset Advertising Identifier.”

Please remove the iOS Advertising Identifier from your app or add ad functionality to your app.

4、含UGC却未提供用户协议及举报功能

如果你的 App 内有发帖等UGC(用户产生内容)功能,必须提供用户协议,并留有内容举报功能,否则就会被审核拒绝。

附被拒理由原文:

We found your app enables the display of user-generated content which may become sexually explicit. Therefore we ask that you put the following precautions in place, to ensure your app remains in compliance with the App Store Review Guidelines. 
Use Moderators to flag and remove inappropriate content 
Require that your users agree to terms (EULA) and these terms must be clear that there’s no tolerance for objectionable content 
Users need a way to flag or report objectionable content and users generating this content 
Developer must act on objectionable content reports within 24 hours by removing the content and ejecting the user who provided the offending content 
Developer needs a method for ejecting users who violate the terms of the EULA

Please keep in mind that it is not sufficient for the user to report an issue through a general user feedback / 反馈 or like/dislike feature of the app. Please ensure that the contents that may become objectionable have a reporting or flagging mechanism readily accessible by the user to allow the user to promptly report or flag the issue and clearly identify the offending content.

5、上传时没有使用真实的应用截图

应用程序的名称、描述、截图或者预览与应用的内容和功能不相关将会被拒绝。有 App 因为应用截图使用的是自己设计的插画而被审核拒绝。

附被拒理由原文:

We noticed that your marketing screenshot(s) do not sufficiently reflect your app in use.We’ve attached screenshot(s) for your reference. 

Please revise your screenshots to demonstrate the app functionality in use.

6、应用必须使用邀请码才能注册使用

苹果要求应用不能限制只有部分用户可以使用。

附被拒理由原文:

Your app arbitrarily restrict users by requiring invitation code to register, which is not allowed on the App Store. We’ve attached screenshot(s) for your reference. 

Please revise your app to remove any functionality that limits who can use the app.

7、应用内出现第三方移动平台的名字或图标

一直以来,苹果都不允许iOS开发者在进行软件描述时提到 Android 版本,而自从2015年4月起,在 App 内、截图等任何地方提到安卓、Android 的文字、图标、系统界面都会被拒。曾经有电商 App,因为出现了售卖三星安卓手机而被拒。。。

附被拒理由原文:

We found that your app and/or its metadata contains inappropriate or irrelevant platform information, which is not in compliance with the App Store Review Guidelines. 
Specifically, your app mentioned other platforms, such as Android.

Providing future platform compatibility plans, or other general platform references, is not appropriate in the context of the App Store. It would be appropriate to remove this information.

8、应用内涉及奖励,未声明与苹果无关

App 里有实物奖励的话,不能使用苹果产品(例如 iPhone 、iPad 等)作为奖品。另外一定要声明“奖励由本公司提供,与苹果官方无关”。

附被拒理由原文:

Your app includes a contest or sweepstakes but it does not: 
Indicate that Apple is not involved in any way with the contest or sweepstakes. 

It is necessary to: 
Include official rules of the contest or sweepstakes in the app 
Include an explicit statement in the contest or sweepstakes rules specifying that > Apple is not a sponsor

Ensure that the contest or sweepstake prizes are not Apple products

9、没有提供恢复内购的方法

增加一个“恢复购买记录”的按钮即可。

附被拒理由原文:

We found that your app offers In-App Purchase/s that can be restored but it does not include a “Restore” feature to allow users to restore the previously purchased In-App Purchase/s.

To restore previously purchased In-App Purchase products, it would be appropriate to provide a “Restore” button and initiate the restore process when the “Restore” button is tapped.

10、未注册时不能使用与账号无关的功能

对于资讯等 App,在没有进行与用户信息相关的操作时,却强行让用户登录,甚至不登录就无法看到任何内容,有可能会被拒绝。

附被拒理由原文:

We noticed that your app requires users to register with personal information to access non account-based features. Apps cannot require user registration prior to allowing access to app content and features that are not associated specifically to the user. 
Specifically, your app forces users to login before they can read the news. 
We features that your app requires users to register or log in, prior to accessing non account-based features. Apps cannot require user registration or login prior to allowing access to app content and features that are not associated specifically to the user. 

User registration that requires the sharing of personal information must be optional or tied to account-specific functionality. Additionally, the requested information must be relevant to the features.

11、iPhone 应用在 iPad 上不能正常显示

iPhone程序必须不经修改就能以iPhone分辨率和2倍iPhone 3GS的分辨率在iPad上运行。即使你的App 只为 iPhone 用户提供,在 iPad 上也必须能够正常显示,否则审核会被拒绝。

附被拒理由原文:

We noticed that your app did not run at iPhone resolution when reviewed on iPad running iOS 9.1, which is a violation of the App Store Review Guidelines. We’ve attached screenshot(s) for your reference. 
Specifically, the buttons at the bottom of the app are inaccessible when running on iPad. 

Please revise your app to ensure it runs at iPhone resolution on iPad.

12、侵犯第三方版权

对于视频、音乐、图书类的应用很容易因为这一条而被拒。另外 ASO100.com 建议应用内最好不要出现第三方的商标,例如运营商的Logo、影视公司的 Logo 等。

附被拒理由原文一:

We found that your app allows users to download music without authorization from the relevant third-party sources. 
We’ve attached screenshot(s) for your reference. 

Please provide documentary evidence of your rights to allow music or video content download from third-party sources. If you do not have the requested permissions, please remove the music or video download functionality from your app. 

附被拒理由原文二:

Your app includes content or features that resemble a well-known, third-party mark, Fox . We’ve attached screenshot for your reference. 
Pursuant to your agreement with Apple, you represent and warrant that your application does not infringe the rights of another party, and that you are responsible for any liability to Apple because of a claim that your application infringes another party’s rights. Moreover, we may reject or remove your application for any reason, at our sole discretion.

Accordingly, please provide documentary evidence of rights to use this content. Once Legal has reviewed your documentation and confirms its validity, we will proceed with the review of your app.

13、应用截图、名称、描述等出现不雅词汇

在应用截图、名称、描述等任何地方出现例如诸如 牛逼、绿茶婊、无节操、逗比 等词汇,都会被苹果审核拒绝。

附被拒理由原文:

We found that your app contains content that many audiences would find objectionable, which is not in compliance with the App Store Review Guidelines. 
Specifically, we noticed your app name 打飞机-简单粗暴 is objectionable.

We encourage you to review your app content and evaluate whether you can modify the content to bring it into compliance with the Guidelines.

14、应用出现 beta版、测试版字样

不要过度谦虚地在启动画面或者应用名称上加上”beta”字样,苹果不允许测试版产品上架。

附被拒理由原文:

Your app appears to be a pre-release, test, or trial version with a limited feature set. Apps that are created for demonstration or trial purposes are not appropriate for the App Store and do not comply with the App Store Review Guidelines. 
To ensure compliance with the App Store Review Guidelines, it would be appropriate to revise your app to complete, remove, or fully configure any partially implemented feature(s).

If you would like to conduct beta trial for your app, you may wish to review the TestFlight Beta Testing Guide.

15、注册缺少隐私政策

如果应用包含注册功能,注册页面必须提供隐私说明协议按钮或者链接。另外在 iTunes connect 提交新版本的时候,Privacy Policy URL 必须要填写。

附被拒理由原文:

We noticed that your app includes account registration or access to users’ existing accounts but does not include a privacy policy, which does not comply with the App Store Review Guidelines.

Please update your app metadata to include a privacy policy and ensure that the privacy policy URL you provide directs the user to the intended destination.

16、应用出现崩溃、加载失败等 bug

审核期间出现崩溃会导致审核被拒。ASO100.com 建议,在审核期间务必保证服务器稳定,避免审核人员审核时出现内容加载失败的情况,导致被拒。

附被拒理由原文:

We discovered one or more bugs in your app when reviewed on iPhone running iOS 8.1.2 on both Wi-Fi and cellular networks. 
Specifically, no content is fetched when users launch the app.Please see the attached screenshot/s for more information. 
It would be appropriate to revise such issue(s) in your application. 

Please run your app on a device to identify the issue(s), then revise and resubmit your app for review.

17、应用描述、截图和应用功能不符

如果应用的描述或截图介绍的功能在审核期间没有体现,则会被拒绝,如果介绍文案不够详细也会有一定概率被拒。

附被拒理由原文:

We found that your app did not achieve the core functionality described in your marketing materials or release notes, as required by the App Store Review Guidelines. 
Specifically, your app does not include the feature of 微信朋友圈分享 that is written in your release note.

It would be appropriate to revise your app to ensure this feature is fully implemented or to revise your Application Description, Release Notes, and/or screenshots to remove this content.

18、应用包含应用推荐功能

除特殊情况,苹果明令禁止应用内推荐其他APP。

附被拒理由原文:

The 应用推荐 feature in your app displays or promotes third-party apps, which violates the App Store Review Guidelines. We’ve attached screenshot(s) for your reference. 

Please remove the 应用推荐 feature from your app.

19、应用包含不正确的诊断功能

如果你的应用中,包含不真实的系统检测或优化功能,苹果会认为这项功能有误导用户的嫌疑,审核时会被拒绝。

附被拒理由原文:

We noticed that your app provides potentially inaccurate diagnostic functionality for iOS devices to the user.

We’ve attached screenshot(s) for your reference.

Currently, there is no publicly available infrastructure to support iOS diagnostic analysis. Therefore your app may report inaccurate information which could mislead or confuse your users. We encourage you to review your app concept and incorporate different content and features that are in compliance with the App Store Review Guidelines.

20、应用提交的新版本与上一版差异过大

如果你提交的新版本应用与上一版相比,功能上变化过大,比如将游戏升级为工具类应用,或在新版本中完全改掉前一版产品的功能,则会被苹果拒绝。

附被拒理由原文:

We found that your app did not achieve the core functionality described in your marketing materials or release notes, as required by the App Store Review Guidelines.

Specifically, the app has a whole content swap from a Game app to a Mobile Data Tracking app, which does not provide a good user experience when updating the app.

It would be appropriate to revise your app to ensure this feature is fully implemented or to revise your Application Description, Release Notes, and/or screenshots to remove this content.

If your iTunes Connect Application State is Rejected, a new binary will be required. Make the desired metadata changes when you upload the new binary.

21、应用违反当地法律法规

应用程序必须遵守上线地区的法律法规,禁止含有赌博、色情、有偿陪伴等违反法律的内容,尤其为用户提供付费社交服务的APP,例如在线直播类APP,必须严格遵守相关规定。

附被拒理由原文:

Your app contains content – or facilitates, enables, and encourages an activity – that is not legal in all of the locations where the app is available. Specifically, your app is advertised as a platform to provide paid companionship services.

We’ve attached screenshot(s) for your reference. 

We encourage you to review your app concept and incorporate different content and features that are in compliance with the App Store Review Guidelines.

22、应用作者名与金融机构名字不一致

针对理财、P2P等金融相关产品,苹果增加规定 
开发者的名字必须与APP内的金融机构名字保持一致,否则会被拒。 
且由同一品牌的金融机构提供服务的APP,必须发布在同一个开发者账号跟名称下。

如果你已经代表委托人或者公司发布了这些APP,你的委托人或者公司应该注册iOS开发者账号,并把你添加到他们的开发者账号里,这样你就可以在他们账号下面提交并发布APP了。

附被拒理由原文:

We found that the Seller and/or Artist names associated with your app do not reflect the name of the financial institution in the app and/or its name and metadata.

To be appropriate for the App Store, your app must be published under a Seller name and Artist name that reflects the financial institution brand, as required by the iOS Developer Program License Agreement.

Section 1.2: 
“You” and “Your” means and refers to the person(s) or legal entity (whether the company, organization, educational institution, or governmental agency, instrumentality, or department) using the Apple Software or otherwise exercising rights under this Agreement. For the sake of clarity, You may authorize contractors to develop Applications on Your behalf, but any such Applications must be submitted under Your developer account.

If you have published these apps on behalf of a client, it would be appropriate for your client to enroll in the iOS Developer Program, then add you to their development team so you can develop an app for them to submit under their developer account.

23、应用提供功能过于简单

应用内的功能不能太过单一,苹果虽然理念中提倡“简单”,但并不代表能接受功能不够完善的应用,他们对应用的核心要求,是希望能够给用户更有价值的体验。当然,如果你的产品太有创意,可能苹果的审核员没能理解它的独到之处,这样的情况下,你可以通过申诉来更详细的描述产品优势,以便通过审核。

附被拒理由原文:

We found that your app only provides a very limited set of features. It only provides an augmented reality reader mechanism with no other functionality. While we value simplicity, we consider simplicity to be uncomplicated – not limited in features and functionality.

We understand that there are no hard and fast rules to define useful or entertaining, but Apple and Apple customers expect apps to provide a really great user experience. Apps should provide valuable utility or entertainment, draw people in by offering compelling capabilities or content, or enable people to do something they couldn’t do before or in a way they couldn’t do it before.

We encourage you to review your app concept and evaluate whether you can incorporate additional content and features to be in compliance with the Guidelines. For information on the basics of creating great apps, watch the video The Ingredients of Great Apps.If you feel we didn’t understand the features of your app, or that we missed key functionality, and your app was incorrectly rejected, you may appeal to the App Review Board.

24、没有后台音频播放,但是却声明了后台音频播放功能的请求

一般都是因为没有后台音频播放,但是却声明了后台音频播放功能的请求。一款App要使用后台音频播放功能,或者即使没有使用后台音频播放但是却声明了要使用后台音频播放功能都会消耗系统资源的,所以苹果才会拒绝掉那些声明了使用后台音频播放但是却没有后台音频播放功能的App。
所以,如果确实有后台音频播放功能,那就和苹果沟通,如果没有后台音频播放功能,那就彻底删除和后台音频播放相关的选项。

如果你想实现后台定位功能也需要通过表格或者轨迹展示出后台定位的数据,再提交审核的时候告诉苹果那个功能需要后台定位,具体展示后台定位的数据在那个界面,最后需要Continued use of GPS running in the background can dramatically decrease <br>battery life加到app描述里面,否则也会被拒绝

被拒原文:

Information Needed

We began the review of your app but are not able to continue because we need access to a video that demonstrates your app in use on an iOS device, showing the app:

- playing audio while the app is in the background
- using persistent location data while the app is in the background

To provide a link to a demo video:

- Log in to iTunes Connect
- Click on "My Apps"
- Select your app
- Click on the app version on the left side of the screen
- Scroll down to "App Review Information"
- Provide demo video access details in the "Notes" section
- Click "Save"
- Once you've completed all changes, click the "Submit for Review" button at the top of the App version information page.

Once this information is available, we can continue with the review of your app.