标签: app store

苹果App Store简介

App store即application store,通常理解为应用商店。App store是苹果公司基于iPhone的软件应用商店,向iPhone的用户提供第三方的应用软件服务,这是苹果开创的一个让网络与手机相融合的新型经营模式。
2008年3月6日,苹果对外发布了针对iPhone的应用开发包(SDK),供免费下载,以便第三方应用开发人员开发针对iPhone及Touch的应用软件。不到一周时间,3月12日,苹果宣布已获得超过100,000次的下载,三个月后,这一数字上升至250,000次。苹果公司一直以来推出的产品在技术上都保持一定的封闭性,比如当年的Mac,此次推出SDK可以说是前所未有的开放之举。继 SDK推出之后,同年7月11日,苹果APP Store正式上线。7月14日,APP Store中可供下载的应用已达800个,下载量达到1千万次。2009年1月16日,数字刷新为,逾1.5万个应用,超过5亿次下载。APP Store平台上大部分应用价格低于10美元,并且有约20%的应用是供免费下载的。用户购买应用所支付的费用由苹果与应用开发商3:7分成。

App store模式的意义在于为第三方软件的提供者提供了方便而又高效的一个软件销售平台,使得第三方软件的提供者参与其中的积*性空前高涨,适应了手机用户们对个性化软件的需求,从而使得手机软件业开始进入了一个高速、良性发展的轨道,是苹果公司把App store这样的一个商业行为升华到了一个让人效仿的经营模式,苹果公司的App store开创了手机软件业发展的新篇章,App store无疑将会成为手机软件业发展史上的一个重要的里程碑,其意义已远远超越了“iPhone的软件应用商店”的本身。

一个iOS项目总结(二):界面

写在前面
今年暑假,自己独立完成了一个简单的iOS的APP,是一个bbs的客户端,叫做喻信星空。现在正在测试,准备将其上架app store。但是光做项目不做总结肯定不行,所以这里写篇博客,把项目里遇到的坑都记录下来,所以这篇博客里肯定是有干货的,所以如果你看到了这里,希望你能把它看完,并顶我一下(^-^)

这是我项目总结的系列博文中的第二篇,此篇文章中列出了在界面编程过程中遇到的问题和一些心得体会,分享给大家,如果有错误或不妥的地方,欢迎大家在评论中指出!

正文
LaunchImage的缺失问题
对于iOS的应用,有一个特点就是必须要有一张LaunchImage,在工程的设置里可以进行设置,LaunchImage可以有两种选择一个是自己提供图片,另一个是LaunchScreen.storyboard。
如果LaunchImage缺失,在iPhone5以后的设备上会出现无法全屏的问题,在应用的上方和下方会有两条黑条,如下方图片。

而且编译时会出现警告:Missing “Default-568h@2x.png” launch image,当你点击这个警告时,Xcode会提示你是否添加一张启动图片,如果你选择添加,Xcode则会帮你添加一张全黑的640 × 1136的启动图片,而此时再次编译运行,你会发现应用刚启动时是黑屏,进入应用后不能全屏的问题消失了。

当然你可以用自己的启动图片来替换这张启动图,或者是使用storyboard,而在我看来使用storyboard应该会更好,storyboard不仅易于适配不同设备,也是苹果所推荐的。

启动动画
现在的应用大多都有启动动画,当然我也想加在这个客户端中,而iOS的APP又必须要有LaunchImage,那为何不将LaunchImage和启动动画结合在一起,想到这里我十分激动,这样的结合感觉十分完美。

于是到网上搜索了一番,发现了将这二者结合起来的方法:

UIViewController *viewController = [[UIStoryboard storyboardWithName:@”LaunchScreen” bundle:nil] instantiateViewControllerWithIdentifier:@”LaunchScreen”];

通过此法,便能得到LaunchScreen的VC,如此问题便简单多了,通过这个VC获取VC的view,用这个view便可以制作动画了,如下图。

登录界面
登录界面看似简单,但也是有玄机在这其中,比如键盘的适配,当点击输入框,键盘便会弹出,此时就有可能遮挡住登录按键或是其他输入框,这个问题该如何解决呢,其实不难,iOS中在键盘状态改变时会发送全局通知,只要注册观察者接收这些通知即可,需要注意的是注册的通知*好是WillShow和WillHiden,这样会显得自然些,不然会有比较严重的延迟:

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden)
name:UIKeyboardWillHideNotification
object:nil];

 

然后在这下面两个方法里处理键盘弹起和收回的情况,在

– (void)keyboardWasShown:(NSNotification *)notification {
NSDictionary *info = [notification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.f, 0.f, kbSize.height, 0.f);
self.backgroundView.contentInset = contentInsets;
self.backgroundView.scrollIndicatorInsets = contentInsets;

CGRect rect = self.loginButton.frame;
rect.size.height += rect.size.height;
[self.backgroundView scrollRectToVisible:rect animated:YES];

}
– (void)keyboardWillBeHidden {
self.backgroundView.contentInset = UIEdgeInsetsZero;
self.backgroundView.scrollIndicatorInsets = UIEdgeInsetsZero;
}

 

系统发送的通知中,包含了键盘高度的信息,拿到这个高度后,便可以将登录的界面向上移动。

这里我的登录界面是放在一个UIScrollView之上,其实和微信的登录界面有些相似,可以随着你的手指上下滚动,我很同意我一个同事的说法,他说每个界面都应该是一个ScrollView,都应该能够响应用户是手势,就是用户在滑动或是拖动的时候,都应该去响应,我觉得这会让用户觉得很爽,会让人觉得比较灵动。

封装简单的tabbar
由TabBar和几个VC作为主界面的应用很是常见,当然系统提供了UITabBarController和UITabBar,不过如果想要定制想要的样式的tabbar,用系统的似乎就有些困难了,像tabbar这样并不复杂的控件,自己写一个是很方便的,我想要一个只有图片没有文字的tabbar,于是就自己写了一个DPTabBar。

首先封装一个DPTabBarItem,继承自UIButton,其实想来也简单,tabbar中不同的tab其实就是几个button,此处使用button作为cell十分合适,而且button具有选中和不选中的属性,而且可以为两种状态设置不同的图片,在此处十分适合。

@interface DPTabBarItem : UIButton

– (instancetype)initWithImage:(UIImage *)image selectedImage:(UIImage *)selectedImage;

@end

 

随后便是封装TabBar了

@class DPTabBarItem;

@protocol DPTabBarDelegate;

@interface DPTabBar : UIView

@property (nonatomic, readwrite, weak) id<DPTabBarDelegate> delegate;
@property (nonatomic, readwrite, assign) NSUInteger selectedIndex;

– (instancetype)initWithTabBarItems:(NSArray<DPTabBarItem *> *)items;

@end

 

初始化方法只有一个,便是使用DPTabBarItem进行初始化,如果不设置*开始的selectedIndex,则默认为0,此外还有两个属性一个表示被选中的tab,另一个是代理,该代理定义如下:

@protocol DPTabBarDelegate <NSObject>

– (void)itemDidSelectAtIndex:(NSUInteger)index;

@end

 

当选中的Tab变化时,调用此代理方法,代理根据index来调整显示的页面。

如何写出一个优雅的tableView
首先上一张图看一下这个tableView:

这是一个很简单的tableView,这里面大部分cell显示的内容都是固定的东西,所以我们就当这个tableView的数据源都是固定的而不是从网上拉到的数据,所以这一部分内容是针对一个简单的tableView,如何优雅的进行组织。

Model
MVC的设计模式是十分经典的模式,在iOS开发中这种模式也是十分常见,而这个tableView也是使用MVC的设计模式,既然是MVC,首先肯定是要有Model,用于保存展示的数据

@interface DPProfileItem : NSObject

@property (nonatomic, strong) UIImage *userImage;
@property (nonatomic, strong) NSString *title1;
@property (nonatomic, strong) NSString *title2;
@property (nonatomic, assign) NSIndexPath *indexPath;

@end

 

此处我的这个Model叫做DPProfileItem,而正常情况之下Model都只是在头文件中进行声明,而.m文件中很少有实现代码,而生成Model的代码却又专门放在一个Manager或dataController类似的单例中,又或是直接将生成的工作放在容纳tableView的VC中,如果需要从网络拉取数据,那么写一个dataController来生成Model倒也是很正常的写法,但是无论如何放在VC中却真是不够优雅。

那么Model生成的代码到底应该放在哪里呢?我觉得*合适的地方应是放在Model的实现文件中,首先Model的生成与Model本身联系十分紧密,放在Model中体现了较高的内聚性,就相当于Model的初始化方法;其次Model的实现文件中本就几无代码,加上这部分代码,显得Model更加饱满而不是仅仅只有头文件的声明;再者这种写法和工厂方法有异曲同工之妙:+ (DPProfileItem *)itemWithType:(DPProfileItemType)type;

tableViewCell
如何优雅的重写UITableViewCell

@interface DPProfileCell : UITableViewCell

@property (nonatomic, weak) id<DPProfileCellDelegate> delegate;

– (void)fillDataWith:(DPProfileItem *)item indexPath:(NSIndexPath *)indexPath;

@end

 

我们都知道tableView具有复用cell的机制,我们在dataSource的代理中使用此方法dequeueReusableCellWithIdentifier:来获取cell然后然后对其进行数据填充,而如果tableView中如果有不同类型的cell,那是否要定义多个继承自UITableViewCell的cell,其实并不需要,我们只要重写一个方法,再定义几个ReuseIdentifier即可:

@implementation DPProfileCell
– (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
if ([reuseIdentifier isEqualToString:DPProfileNormalCellReuseIdentifier]) {
self.type = DPProfileCellTypeNormal;
}
else if ([reuseIdentifier isEqualToString:DPProfileUserCellReuseIdentifier]) {
self.type = DPProfileCellTypeUser;
}
else if ([reuseIdentifier isEqualToString:DPProfileSwitchCellReuseIdentifier]) {
self.type = DPProfileCellTypeSwitch;
}
}
return self;
}
@end

 

然后根据ReuseIdentifier生成不同的cell。

数字的意义
在代码中经常会出现一些数字常量,而在承载tableView的VC中,数字的常量也是很多的,尤其是在tableView的代理中我们需要根据indexPath去判断section、row。

typedef NS_ENUM(NSUInteger, DPProfileSection) {
DPProfileSectionOne = 0,
DPProfileSectionTwo = 1,
DPProfileSectionThree = 2,
DPProfileSectionFour = 3,
DPProfileSectionFive = 4
};

typedef NS_ENUM(NSUInteger, DPProfileRow) {
DPProfileRowOne = 0,
DPProfileRowTwo = 1,
DPProfileRowThree = 2,
DPProfileRowFour = 3
};

 

与其直接使用数字,不如定义一个枚举让数字的意义显得更加明显,除此之外其他的数字数字都可以定义为静态常量

static const NSUInteger rowNumOfSectionOne = 1;
static const NSUInteger rowNumOfSectionTwo = 1;
static const NSUInteger rowNumOfSectionThree = 4;
static const NSUInteger rowNumOfSectionFour = 2;
static const NSUInteger rowNumOfSectionFive = 1;
static const NSUInteger numOfSection = 5;

 

总而言之,尽量不要在代码中直接使用数字常量,让自己的代码具有更好的可读性、维护性。拿上面中的numOfSection举例,如果在代码中多次用到该常量,如果不定义一个静态常量,当你想要修改此值时你便要去代码中各处寻找一一修改,如果你少改了一个地方那么就可能出现某些bug,而如果你定义了一个常量,当你想要修改时,只要修改此处便可,也不用担心bug的出现。

UITableView自适应高度
UITableView可以算是iOS应用的中*常用的控件了,在我的这个应用中大部分的页面都主要由UITableView组成,对于cell高度固定的UITableView倒是很简单,但是对于高度不定的UITableView却有许多可以优化的地方。

在UITableViewDelegate中- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;的方法用于返回tableView中cell的高度,而在tableView初始化时该方法便会调用数次,调用的次数便是UITableViewDataSource中- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; 和- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; 返回的cell数总和,用于计算tableView的总高度,随后还会调用数次,用于返回将要显示在屏幕上的cell的高度。

所以如果要根据内容来计算不同cell的高度,便要在此方法返回前计算出每个cell的高度,然而此时cell还未生成,而cell的高度不仅由cell显示的内容决定,还会受cell中的布局影响,所以计算高度的工作不应该由展示tableView的VC来做,而是应该交给cell去做,若是放在VC之中,那么cell和VC的耦合就太高了,一旦cell的布局改变,那么计算高度的方法就要做出改变,而一般如果要是手动计算则会用下面的方法:

– (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary<NSString *, id> *)attributes context:(nullable NSStringDrawingContext *)context NS_AVAILABLE(10_11, 7_0);
1
但是如果cell布局复杂,那么用这个方法计算高度则要写很多代码,十分复杂,而且很不灵活,那么是否能够根据cell内容自动设定高度呢,答案是有的,在iOS7中UITableView出现了新的功能可以达到此效果:estimatedRowHeight。

此属性是用于估算tableView的高度,大致计算出tableView的总高度,而此tableView高度自适应要配合着iOS6中出现的autolayout使用才可以,cell中用autolayout填充满contentView的高度和宽度,然后对tableView进行一定设置,cell的高度就能自动计算,然而这种方式却有一些让人难以忍受的缺点,在tableView滑动的过程中主要是由下往上划的过程中界面会出现抖动甚至跳跃,给人一种十分卡顿的感觉,这种情况的主要原因是因为在滚动的过程中cell的高度由估算的高度变成真实的高度造成的,本身这种新特性的引入就是为了优化性能,然而这种体验还不如不要这优化的性能。

那么是否有更加优雅的方式做到UITableView高度的自适应,经过一番搜索,找到了一个合适的方案:UITableView-FDTemplateLayoutCell至于如何使用大家可以参考这篇文章:优化UITableViewCell高度计算的那些事。

这篇文章中说到此控件具有预缓存机制,而且进行了优化:利用RunLoop空闲时间执行预缓存任务。我也没有看过源码,但至少是在使用的过程中并没有发现这个功能,此控件在tableView的data source的高度方法中即对cell进行内容填充利用autolayout计算高度,进行储存后并返回给代理中的方法,在tableView初始化的过程中即计算出所有cell的高度,后面再需要某个cell的高度时,直接获取缓存中的高度,所以此控件并非对性能做出什么优化,方便的只是高度自适应和cell高度的缓存,避免反复的计算。

模仿苹果信息应用灵动效果
首先看一下效果:

我们看到每个cell之间似乎是用弹簧连接,当滑动的时候,离的远的cell会有一定迟钝,给人一种很灵动的感觉,而此效果实现起来并不复杂,只要重写UICollectionViewFlowLayout即可,配合iOS7中出现的UIDynamic特性,下面我们就看具体实现。

首先重写UICollectionViewFlowLayout要重写3个方法:

– (void)prepareLayout;
– (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
– (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath

 

首先在prepareLayout方法中用自身实例化一个UIDynamicAnimator,然后获取每个cell的attribute,用每个cell初始化一个UIAttachmentBehavior,加入到animator中。

-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {
return [_animator itemsInRect:rect];
}
– (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath {
return [_animator layoutAttributesForCellAtIndexPath:indexPath];
}

然后将attribute的管理全都交给animator来处理,然而到这里并没有结束,还要再看一段稍长的代码

-(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds {
UIScrollView *scrollView = self.collectionView;
CGFloat scrollDelta = newBounds.origin.y – scrollView.bounds.origin.y;
CGPoint touchLocation = [scrollView.panGestureRecognizer locationInView:scrollView];

for (UIAttachmentBehavior *spring in _animator.behaviors) {
CGPoint anchorPoint = spring.anchorPoint;
CGFloat distanceFromTouch = fabs(touchLocation.y – anchorPoint.y);
CGFloat scrollResistance = distanceFromTouch / self.resistanceFactor;

UICollectionViewLayoutAttributes *item = (UICollectionViewLayoutAttributes *)[spring.items firstObject];
CGPoint center = item.center;
center.y += (scrollDelta > 0) ? MIN(scrollDelta, scrollDelta * scrollResistance)
: MAX(scrollDelta, scrollDelta * scrollResistance);
item.center = center;

[_animator updateItemUsingCurrentState:item];
}
return NO;
}

 

只要UICollectionView边界发生改变就会调用这个方法,在这个方法中,根据手指滑动的位置和cell的位置进行计算,调整cell中心的位置从而产生灵动的效果。

这个并不是我写的,而是喵神王巍的作品,只是对其进行了分析,这里给出其github地址:VVSpringCollectionViewFlowLayout

结语
界面部分的总结大致就是这样,如果你能看到这里,我想真心的对你说一声感谢,能够看完我上面的”胡言乱语”,*后再次复习一下此项目的github地址:喻信星空

App Store 审核必备

App Store 审核规则中文版
简介
App 正在改变世界,丰富人们的生活,并为像您一样的开发者提供前所未有的创新机会。因此,App Store 已成长为一个激动人心且充满活力的生态系统,正为数百万的开发者和超过十亿的用户提供服务。不管是开发新手,还是由经验丰富的程序员所组成的大型团队,我们都非常欢迎您为 App Store 创建 app,并希望能够帮助您了解我们的准则,以确保您的 app 能够快速通过审核流程。

App Store 的指导原则非常简单:我们希望为用户获取 app 时提供更安全可靠的体验,并为所有开发者提供借助 app 获得成功的契机。在后续页面中,您会发现这些准则已被清晰地划分为五个部分:安全、性能、业务、设计及法律。另外,请将以下几点谨记在心:

很多儿童会从我们这里大量下载各种 app。尽管家长控制功能能为儿童提供有效保护,但您也必须做好自己份内的工作。因此,您要知道,我们时刻都在关注这些儿童。
App Store 是向全球数亿人分享 app 的好方法。如果您开发 app 只是为了分发给亲朋好友,那么 App Store 并不是*适合的途径。这时可考虑使用 Xcode 在设备上安装您的 app,或使用 Apple Developer Program 会员资格中的 Ad Hoc 分发。如果您刚开始开发 app,请进一步了解 Apple Developer Program。
在 App Store 上发布的所有观点,我们都非常支持 — 只要这些 app 尊重用户的不同意见,并能带来良好的 app 体验。如果我们认为 app 的任何内容或行为超出了可接受的范围,我们将拒*该 app。您可能会问,这个可接受的范围是什么?套用*高法院大法官的一句话:“当我看到的时候,我就知道了”。而且,我们相信,当您超出这个范围时,您自己也会意识到。
如果您试图欺骗系统 (例如,试图在审核流程中弄虚作假,窃取用户数据,抄袭其他开发者的作品,或者操纵评级),我们会从商店中移除您的 app,并将您从开发者帐户中除名。
您要确保 app 中所含内容全部符合这些准则的要求,包括广告网络、分析服务和第三方 SDK 等;因此,在审核和选择这些内容时务必要慎重。
我们希望这些准则能帮助您顺利通过 App Review 流程,并使批准和拒*标准在整体上更加一致。本文是一个动态文稿;如果新的 app 引发了新的问题,我们可能会随时制定新的规则。也许,您的 app 就将促成新的规则。我们同样热爱 app 开发,并且尊重您所做的一切。我们正竭尽全力为您营造世界上*优秀的平台,既能让您展示才华,还能让您获得回报。

,

提交之前
为了帮助您尽可能顺利地通过 app 审批,请查看下方列出的常见错误行为,这些行为可能会导致审核流程延误或导致 app 被拒。这些内容不能代替准则或保证 app 获批,但确保核对这个列表中的每一项会是一个良好的开始。如果您的 app 不再能按预期方式工作,或者您不再积*地对其提供支持,那么这个 app 将从 App Store 中移除。进一步了解 App Store 所做的改善。

请确保:

测试 app 是否会发生崩溃、是否存在错误
确保所有 app 信息及元数据完整且正确
更新您的联系信息,以便 App Review 部门在需要时与您取得联系
提供有效的演示帐户和登录信息,以及审核 app 时所需的任何其他硬件或资源 (例如,登录凭证或示例二维码)
启用后台服务,以使其在审核期间处于活动和可用状态
在 App Review 备注中附上与非明显功能及 App 内购买项目相关的详细说明,包括支持文稿 (如适用)。如果由于地区锁定或其他限制而导致我们无法访问 app 的部分内容,请提供有关功能的视频链接
检查 app 是否遵循了其他文稿中的相关指南,如:
开发指南

App 编程指南 (英文)
App 扩展编程指南 (英文)
iOS 数据存储指南 (英文)
macOS 文件系统文档 (英文)
Safari 浏览器扩展开发指南 (英文)
App Store Connect 帮助
设计指南

Human Interface Guidelines (英文)
品牌和营销指南

营销资源和识别标志指南
Apple Pay 识别标志指南 (英文)
“添加到 Apple 钱包” 指南 (英文)
Apple 商标及版权使用准则 (英文)
,

1. 安全
当用户通过 App Store 安装 app 时,他们希望获得安全的体验:app 不含令人不快或具有攻击性的内容,不会损坏用户的设备,不会在使用中造成人身伤害。我们在下方列出了主要的安全隐患。如果您想恐吓或攻击他人,则您的 app 不适合出现在 App Store 中。

1.1 令人反感的内容
App 不应包含具有攻击性、不顾及他人感受、令人不安、惹人厌恶或低俗不堪的内容。此类内容的示例有:

1.1.1 诽谤、歧视或恶意的内容,包括有关宗教、种族、性取向、性别、国籍、种族起源或其他目标群体的引用或评论,特别是当 app 很可能对特定的个人或团体进行羞辱、恐吓、或造成伤害时。通常情况下,专业政治讽刺和政治幽默作家不受此要求限制。
1.1.2 人类或动物遭到杀害、残害、酷刑、虐待的写实描绘,或者鼓励暴力的内容。在游戏中,“敌人”不能单单针对特定种族、文化、真实存在的政府或企业,或是任何其他真实存在的实体。
1.1.3 鼓励非法使用或不负责任地使用武器和危险物品的描述,或者促进军火购买的描述。
1.1.4 过于色情的内容 (韦氏词典对“色情”一词的定义是:对性器官或性活动的露骨描述或展示,目的在于刺激性快感,而非带来美学价值或触发情感)。
1.1.5 具有煽动性的宗教评论,或者对宗教文本进行错误或误导性的引用。
1.1.6 虚假信息和功能,其中包括不准确的设备数据或用于恶作剧/开玩笑的功能,如虚假的位置跟踪器。即使指明 app“仅供娱乐”,也不能违背这一准则。支持匿名或恶作剧电话或短信/彩信的 app 会被拒*。
1.1.7 App Store 评论:
App Store 客户评论是 app 体验中不可或缺的一部分;因此,在回复客户的评论时,您应当对他们保持尊重。另外,您的回复应直接回应客户评论的主题,请勿在回复中包含个人信息、垃圾信息或营销广告。
利用我们提供的 API 提示用户评价您的 app:通过这项便利功能,客户无需离开 app,就可直接在 App Store 中留下评分和评论;不允许使用预定的评论提示。
1.2 用户生成的内容
对于包含用户生成内容的 App,有特定的难题需要解决,比如知识产权侵权、匿名欺凌等。为了避免滥用,包含用户生成内容或社交网络服务的 app 必须满足以下条件:

采用相应的方法来过滤令人反感的内容,以免这些内容在 app 中发布
制定一个机制,以举报攻击性内容并在出现问题时及时作出回应
若用户发布攻击性内容,可以取消其使用服务的资格
公布联系信息,以便用户与您联系
如果 app 中所含的用户生成内容或服务*终主要用于色情内容、客观化现实生活中的某人 (如“性感与否”投票)、进行人身威胁或欺凌,则这些 app 不适合出现在 App Store 中,它们可能会在未经通知的情况下被移除。如果 app 中所含的用户生成内容来自于基于 web 的服务,则可显示意外产生的“NSFW (公众场所不宜)”内容,前提是这些内容是默认隐藏的,只有当用户通过您的网站将其打开时才会显示。

1.3 儿童类别
“儿童类别”可帮助用户轻松找到专为儿童设计的 app。如果您希望参与“儿童类别”,则应该致力于为年纪较小的用户量身打造卓越的使用体验。这些 app 不得提供 app 外链接、购买机会或其他会对儿童造成干扰的内容,除非其保留在受家长监控的指定区域中。请谨记,一旦客户认为您的 app 能够满足“儿童类别”要求,您的 app 就需要一直满足后续更新中的相应准则;即使您决定取消选择此类别,也是如此。进一步了解家长监控。

“儿童类别”中的 app 不得展示行为广告 (例如,广告商不得根据用户在 app 中的活动投放广告),而且所有内容相关广告都必须适合儿童观看。您还应特别留意世界各地与在线收集儿童数据相关的隐私法。请务必查阅这些准则的“隐私”部分,以了解更多信息。

1.4 人身伤害
如果 app 的行为方式可能会造成人身伤害,我们可能会拒*该 app。例如:

1.4.1 如果医疗 app 可能会提供错误的数据或信息,或用于诊断或治疗病患,则这些 app 可能会面临更加严格的审核。
App 必须清楚地披露相关数据和方法,用于佐证声明的健康测量准确度,如果准确度或方法得不到验证,我们会拒*该 app。例如,如果 app 声称仅通过设备上的传感器就能照 X 光、测血压、测体温、测血糖浓度或测血氧含量,则这个 app 会被拒*。
App 应当提醒用户,除了使用该 app,还应咨询医生的意见,然后才能做出医疗决定。
如果您的医疗 app 已经获得监管部门的批准,请随 app 提交相关文稿的链接。
1.4.2 药物剂量计算器必须来自药品生产企业、医院、大学、健康保险公司、药店或经过 FDA 或其相应国际部门的批准的其他实体。由于可能会对病患造成伤害,我们需要确保 app 将在长时间内获得支持,并保持更新。
1.4.3 App Store 中不允许分发任何鼓励食用烟草产品、使用违禁药物或摄入过量酒精的 app。鼓励未成年人摄入任何上述物品的 app 都会被拒*。为大麻、烟草或管制物品的销售提供便利 (经授权的药店除外) 同样不被允许。
1.4.4 App 只能显示由相关执法部门公布的酒后驾车检查点,不得鼓励酒后驾车和包括超速在内的其他鲁莽行为。
1.4.5 App 不得促使客户以违背 Apple 硬件安全文稿的方式,或以可能会造成设备或人身伤害的方式来使用他们的设备。例如,app 不得鼓励在充电期间将设备置于床垫或枕头下,或对固态硬盘进行过多的写入循环操作。请查阅设备文稿。
1.5 开发者信息
用户需要知道如何就疑问和支持问题与您取得联系。确保您的 app 及其支持 URL 中包含能轻松联系到您的联系信息;对于可能会在课堂中使用的 app 而言,这一点尤为重要。如果未能提供准确的*新联系信息,不但会让客户有不好的感受,可能还会违反某些国家/地区的法律。另外,请确保在钱包凭证中包含发卡机构的有效联系方式,以及分配给凭证的品牌或商标所有者的专用证书。

1.6 数据安全
App 应实施适当的安全举措,确保按照“Apple Developer Program 许可协议”和这些准则 (更多信息见“准则 5.1”) 妥善处理收集到的用户信息,防止对这些信息进行未经授权使用、披露或者被第三方访问。

,

2. 性能
2.1 App 完成度
提交至 App Review 的申请 (包括可供预订的 app) 应为该 app 的*终版本,并应包含所有必要的元数据和有效网址。所有占位符文本、空白网站和其他临时内容应在提交前移除。在提交 app 之前,请务必在设备上对 app 的错误和稳定性进行测试;如果您的 app 需要登录,请提供演示帐户信息 (并打开您的后台服务!)。如果您在 app 中提供了 App 内购买项目,请确保审核人员能够看到这些内容,并确保这些内容处于完整且*新的状态,否则请在审核备注中说明相关原因。请不要将 App Review 视作软件测试服务。我们将拒*不完整的 app 套装以及会出现崩溃或存在明显技术问题的二进制文件。

2.2 Beta 版测试
App 的演示版、beta 版和试用版不适合出现在 App Store 中,请改用 TestFlight。所有通过 TestFlight 提交以进行测试发布的 app 都应旨在公开发布,并应遵循“App Review 准则”。请注意,使用 TestFlight 的 app 不得分发给测试者用以换取任何类型的报酬,包括作为众筹资金的*励。对于 beta 版 app 的大幅更新应先提交至 TestFlight App Review 团队,然后再分发给您的测试者。欲了解更多信息,请访问“TestFlight Beta 测试”。

2.3 准确的元数据
客户应该知道他们在下载或购买您的 app 时会得到什么,所以请确保 app 的描述、屏幕快照和预览能够准确反映 app 的核心体验,并记得不断更新,以便保持与新版本相应的*新状态。

2.3.1 请勿在 app 中包含未记录的功能或隐藏功能;不管是对于*终用户还是 App Review 团队,app 功能都应清晰可见。同样,您不应该在 App Store 或离线情况下,营销您的 app 中实际并不提供的内容或服务 (例如基于 iOS 的病毒和恶意软件扫描工具)。如果出现恶劣或屡教不改的行为,则可能会从 Apple Developer Program 中除名。我们正努力将 App Store 打造成值得信赖的生态系统,并希望我们的 app 开发者也能如此;如果您不诚实以待,我们之间就不会有任何业务往来。
2.3.2 如果您的 app 包含 App 内购买项目,请确保 app 的描述、屏幕快照和预览清楚地指明是否有需要另行购买的精选项目、关卡和订阅等。如果您决定在 App Store 中推广 App 内购买项目,请确保 App 内购买项目的显示名称、屏幕快照和描述适合所有公众,并遵循“推广您的 App 内购买项目”中的准则;此外,您的 app 也应正确使用 SKPaymentTransactionObserver 方法 (英文),以便客户可以在 app 内无缝完成购买。
2.3.3 屏幕快照应展示 app 的使用情况,而非仅显示标题封面、登录页面或初始屏幕。屏幕快照还可以包括文本及图像说明 (例如:演示输入机制,如触控点或 Apple Pencil 的动画),并展示设备上的扩展功能,如触控栏。
2.3.4 预览是让客户了解 app 外观和功能的好方法。为了确保客户理解他们将在 app 中获得的体验,预览只可使用从 app 中采集的视频屏幕。Stickers 和 iMessage 信息扩展可以将用户体验展示在“信息”app 中。您也可以添加旁白和视频,或添加文本说明,以帮助说明任何无法仅通过视频进行阐明的内容。
2.3.5 请为 app 选择*适合的类别,并在需要帮助时参考“App Store 类别定义”。如果选择的类别与实际情况相差较远,我们可能会更改 app 的类别。
2.3.6 请在 App Store Connect 中诚实地回答年龄分级问题,以使 app 与家长控制功能的分级保持一致。如果 app 分级有误,客户在获得 app 时可能会感到诧异,或促使政府监管部门展开相应调查。如果 app 所含的媒体内容要求显示内容分级或警告 (如电影、音乐和游戏等),则需在销售 app 的每个地区内遵循当地要求。
2.3.7 请选择一个独一无二的 app 名称,指定能够准确描述 app 的关键词,不要试图用商标术语、流行 app 的名称或其他不相关的短语来包装任何元数据,以此欺骗系统。App 名称必须限制在 30 个字符以内,且不得包含不属于 app 名称的价格、词语或描述。App 副标题是详细介绍 app 背景信息的*佳之处。副标题必须遵循我们的标准元数据规则,且不得包含不当内容、提及其他 app 或做出无法证实的产品声明。Apple 可以随时修改不合适的关键字或采取其他相应步骤,以防止不当使用。
2.3.8 元数据应适合所有受众,所以请确保您的 app 和 App 内购买项目的相关图标、屏幕快照和预览保持在 4+ 年龄分级;即使您的 app 分级更高,也应如此。例如,如果您的 app 是包含暴力的游戏,请勿选择包含惨烈的死亡或用枪瞄准特定角色的图像。只有“儿童类别”的 app 才能在元数据中使用类似“适合幼儿”和“适合儿童”等词语。请务必确保包括 app 名称和图标 (小图标、大图标、Apple Watch app 和备用图标等) 在内的元数据彼此相似,以免引起困惑。
2.3.9 您应负责确保有权使用 app 图标、屏幕快照和预览中的所有材料,并应显示虚构的帐户信息,而非真实个人的数据。
2.3.10 请确保您的 app 注重 iOS、Mac、Apple TV 或 Apple Watch 体验,并且不在 app 或元数据中包含其他移动平台的名称、图标或图像,除非存在已获批的特定互动功能。
2.3.11 您提交至 App Store 可供预订的 app 必须为完整且可发布的状态。请确保您*终发布的 app 与其可供预订状态时所宣传的内容没有实质性差异。如果您对该 app 进行了重大更改 (例如更改其商业模式),则应重新开始其预订销售。
2.3.12 App 必须在其“新功能”文本中清楚地描述新功能和产品更改情况。一些简单的错误修复、安全更新和性能改进可以通过一般描述来说明,但较为重大的更改必须列明在备注中。
2.4 硬件兼容性
2.4.1 为了确保用户能够充分利用您的 app,iPhone app 应尽量能在 iPad 上运行。我们鼓励您考虑开发通用 app,这样客户就可以在所有设备上加以使用。进一步了解通用 app。
2.4.2 通过设计,使 app 节省能耗。App 不应快速耗尽电池电能、产生过多的热量或对设备资源造成不必要的负担。App 及其中显示的任何第三方广告均不可运行无关的后台进程,如加密货币挖矿。
2.4.3 对于 Apple TV app,应确保用户无需使用除 Siri Remote 或第三方游戏控制器之外的硬件输入,但您可以随意提供增强功能供连接其他外围设备时使用。如果需要用户配备游戏控制器,请务必在元数据中清晰说明,以便用户知晓他们需要额外的设备才能玩游戏。
2.4.4 App 不得建议或要求重新启动设备,或者修改与 app 核心功能无关的系统设置。例如,请勿鼓励用户关闭 Wi-Fi 或停用安全功能等。
2.4.5 对于通过 Mac App Store 分发的 app,还有几个额外要求需要您留意:
(i) 这些 app 必须妥当地沙箱化,并遵循“macOS 文件系统文档 (英文)”。另外,这些 app 只应使用相应的 macOS API 来修改其他 app 存储的用户数据 (如书签、“地址簿”或“日历”条目)。
(ii) 这些 app 必须使用 Xcode 中提供的技术来进行打包和提交;不允许使用第三方安装器。另外,这些 app 必须是单个的自包含 app 安装包,不能将代码或资源安装在共享位置。
(iii) 这些 app 不得自动启动或者在启动时包含其他自动运行的代码,不得在未经同意的情况下登录,也不得大量生成在用户退出 app 后仍在未经同意的情况下继续运行的进程。这些 app 不得将图标自动添加到程序坞中,或在用户桌面上留下快捷方式。
(iv) 这些 app 不得下载或安装独立的 app、kext、额外代码或资源,以向我们在审核过程中看到的 app 添加功能,或进行大幅更改。
(v) 这些 app 不得申请升级至 root 特权或使用 setuid 属性。
(vi) 这些 app 不得在启动时显示许可证屏幕、需要使用许可证密匙或实施自己的拷贝保护措施。
(vii) 这些 app 必须使用 Mac App Store 分发更新;不允许使用其他更新机制。
(viii) 这些 app 应在当前发布的 OS 上运行,不得使用已停用或选装的技术 (如 Java、Rosetta)。
(ix) 这些 app 必须在单个 app 套装内包含所有的语言和本地化支持。
2.5 软件要求
2.5.1 App 仅可使用公共 API,并且必须在当前发布的 OS 上运行。进一步了解公共 APIs (英文)。及时更新您的 app,在未来的操作系统版本中不再支持的任何过时功能、框架或技术皆应被淘汰。App 使用的 API 和框架应该是为了实现预期用途,并在 app 描述中说明集成详情。例如,HomeKit 框架应提供家居自动化服务,HealthKit 则应该用于保持健康和健身目的,并集成在“健康”app 中。
2.5.2 App 应自包含在自己的套装中,不得在指定容器范围外读取或写入数据,也不得下载、安装或执行会引入或更改 app 特性或功能的代码,包括其他 app。仅在特殊情况下,用于教授、开发或允许学生测试可执行代码的教育类 app 可以下载所提供的代码,但这类代码不得用于其他用途。这类 app 必须开放 app 提供的源代码,让客户可以完全查看和编辑这些源代码。
2.5.3 如果 app 传输的病毒、文件、计算机代码或程序会对操作系统和/或硬件功能 (包括推送通知和 Game Center) 的正常运行造成负面影响或导致其中断,则该 app 会被拒*。屡教不改或恶劣的违规行为会导致开发者从 Apple Developer Program 中被除名。
2.5.4 多任务处理 app 只允许在实现预期用途时使用后台服务:VoIP、音频播放、地理位置、任务完成记录和本地通知等。如果 app 使用定位后台模式,请提醒用户,这么做会大幅缩短电池使用时间。
2.5.5 我们将在 IPv6 网络上进行审核。如果您的 app 无法与 IPv6 寻址功能兼容,则可能无法通过审核。
2.5.6 如果 app 会浏览网页,则必须使用相应的 WebKit 框架和 WebKit Javascript。
2.5.7 基于蜂窝移动网络且超过 10 分钟的视频流内容必须使用 HTTP 实时流化,并包含一个 192 kbps 为底线的 HTTP 实时流化。
2.5.8 如果 app 会创建替代的桌面/主屏幕环境,或者模拟多 app 插件体验,则该 app 会遭到拒*。
2.5.9 如果 app 会改变或停用标准开关 (如调高/调低音量和铃声/静音开关) 的功能,或者改变或停用其他的原生用户界面元素或行为,则该 app 会遭到拒*。例如,app 不应屏蔽转向其他 app 的链接,或用户希望以某种特定方式运行的功能。进一步了解如何正确处理链接。
2.5.10 不得提交包含空白广告横幅或测试广告的 app。
2.5.11 SiriKit 和快捷方式
(i) 集成 SiriKit 和快捷方式的 app 只能登记无需其他 app 支持便可处理的意图,而且这个意图应当与用户对所述功能的预期相符。例如,如果您的 app 属于膳食计划 app,则不应融入开始体能训练的意图,即使这个 app 共享了与健身 app 的集成也不可以。
(ii) 确保 plist 中的词汇和短语与您的 app 及它所登记意图的 Siri 功能相符。别名必须与您的 app 或公司名称直接相关,不得使用通用术语或者包含第三方 app 名称或服务。
(iii) 以*直接的方式解析 Siri 请求或快捷方式,不要在请求与实现之间插入任何广告或其他市场营销信息。只有在完成相关任务需要时 (例如让用户指定特定类型的体能训练时),才可以要求解疑。
2.5.12 利用 CallKit 或包含 SMS Fraud 扩展的 app 应该只拦截已确认用于发送垃圾信息的电话号码。具有通话、短信或彩信拦截功能或垃圾信息识别功能的 app 必须在营销文本中清楚标识这些功能,并且说明归入拦截列表和垃圾信息列表的标准。通过这些工具获得的数据不得用于与运行或改进您的 app 或扩展没有直接关联的任何其他目的 (例如,不得出于跟踪或创建用户资料等目的来使用、共享或销售这些数据)。
2.5.13 若有可能,使用人脸识别进行帐户验证的 app 必须使用 LocalAuthentication (英文) (而非 ARKit 或其他人脸识别技术),且必须对未满 13 岁的用户使用备用身份验证方式。
2.5.14 在录像、记录日志或以其他方式记录用户活动时,app 必须征得用户的明确同意,而且要提供清晰的视觉指示。这还包括任何对设备摄像头、麦克风或其他用户输入方式的使用。
2.5.15 能够让用户查看和选择文件的 app 应包含“文件”app 中的项目和用户的 iCloud 文稿。
,

3. 业务
在 App Store 中,您可以通过多种方式让自己的 app 实现盈利。如果您的业务模式并不显而易见,请务必在其元数据和 App Review 备注中加以说明。如果我们无法理解 app 的工作方式,或者 App 内购买项目不是那么一目了然,则审核会有所延误,并可能会导致 app 被拒*。尽管价格由您决定,但是我们不会分发要价明显过高的 app 和 App 内购买项目。对于试图以不合常理的高昂价格欺骗用户的 app,我们将予以拒*。

如果我们发现您试图操纵评论,通过付费、提供*励、经过筛选或伪造反馈来提高排名,或者要求第三方服务代您这样做,我们会采取相应措施以维护 App Store 的公正诚信。采取的措施可能包括将您从 Apple Developer Program 中除名。

3.1 付款
3.1.1 App 内购买项目:
如果您想要在 app 内解锁特性或功能 (解锁方式有:订阅、游戏内货币、游戏关卡、优质内容的访问权限或解锁完整版等),则必须使用 App 内购买项目。App 不得使用自身机制来解锁内容或功能,如许可证密钥、增强现实标记、二维码等。App 及对应元数据不得包含指引客户使用非 App 内购买项目机制进行购买的按钮、外部链接或其他行动号召用语。
App 可以提供 App 内购买货币,供客户在 app 内“打赏”数字内容提供商。
通过 App 内购买项目购买的所有点数和游戏货币不得过期,并且您应确保为所有可恢复的 App 内购买项目设计一套恢复机制。
请务必指定正确的可购买类型,否则您的 app 将被拒*。
App 可为其 App 内购买项目的内容启用赠送功能。此类*品的退款只能返还给原购买者,且*品内容不得更换。
通过 Mac App Store 分发的 app 可托管基于非 App Store 机制的插件或扩展。
提供“战利品箱”或其他随机虚拟物品购买机制的 app 必须在客户购买前,向客户披露每种类型物品的获取几率。
非订阅型 app 在提供完整解锁选项前可以提供按时间计算的免费试用期,方法是在“价格等级 0”中设置非消耗型 IAP 项目,并按照命名约定“XX 天试用”来命名。在开始试用之前,app 必须清楚指明试用期时长、试用期结束后不再能访问的内容或服务,以及用户为获得完整功能而需要支付的任何后续费用。进一步了解如何使用收据 (英文)和设备检查 (英文) 来管理内容访问权限和试用期时长。
3.1.2 订阅:无论属于 App Store 上哪一类别,app 都可以提供自动续订的 App 内购买订阅。在 app 内集成可自动续订的订阅时,请务必遵循下述指导原则。
3.1.2(a) 允许的用途:如果您提供自动续订订阅,则必须为客户提供持续的价值,订阅期必须持续至少七天,并且能够在用户的所有设备上访问。以下并非详尽列表,适当的订阅示例包括:新游戏关卡;连载内容;多玩家支持;持续提供实质性更新的 app;对媒体内容的大型合集或持续更新的访问权限;软件即服务 (SAAS);以及云服务支持。此外:
订阅可与单点式服务一起提供。例如,您可以提供整个影片库的订阅,以及单部影片购买或租赁。
您可以在您的多个 app 和服务中提供跨 app 的订阅项目,但这些订阅不可扩展到第三方的 app 或服务。游戏订阅中提供的游戏必须由该开发者拥有或已受*许可 (例如:非属于游戏发布平台的一部分)。所有游戏都必须直接从 App Store 下载。游戏须避免订阅用户的重复支付,且不应损害非订阅用户的利益。
订阅必须适用于可使用该 app 的所有用户设备。进一步了解在您的多个 app 之间共享订阅项目 (英文)。
App 不得强制要求用户为 app 评级或点评、下载其他 app,或执行其他类似操作,然后才能访问该 app 的功能、内容或者使用该 app。
与所有 app 一样,此类服务订阅应当允许用户直接获得付费购买的项目而无需执行额外任务,如在社交媒体上发帖、上传通讯录,以及在 app 内签到特定次数等。
订阅可以包含消耗性的积分、宝石或游戏内货币等。您也可以提供包含消耗性商品打折权益的订阅 (例如能以优惠价购买宝石包的高级会员资格)。
如果要将现有 app 更改为基于订阅的业务模式,您不得减掉现有用户已付费购买的主要功能。例如,针对新客户引入订阅模式后,已购买“完整游戏解锁”的客户应能够继续访问完整版游戏。
支持自动续期订阅的 app 可以通过提供 App Store Connect 中规定的相关信息,来为客户提供免费试用期。如果您的 app 试图通过虚假信息诱骗用户购买订阅或涉及“诱购”行为,这个 app 会被从 App Store 中移除,您也可能会被从开发者帐户中除名。进一步了解订阅免费试用期。
3.1.2(b) 升级和降级:用户应能获得无缝的升级/降级体验,并且不会出现无意间订阅同一内容的多个不同版本。请查阅关于管理订阅升级和降级选项的*佳做法 (英文)。
3.1.2(c) 订阅信息:在让客户订阅之前,您应当清晰描述付费后的具体权益。每月有几期?云存储容量有多大?具体能访问您的哪些服务?务必清晰地传达“协议、税务和银行业务”下“Apple Developer Program 许可协议”的“附件 2”中所述的要求。
3.1.3(a) “阅读器”App:App 可以允许用户访问先前购买的内容或内容订阅 (具体包括:杂志、报纸、图书、音频、音乐、视频、专业数据库访问权限、VoIP、云存储以及经批准的服务,如课堂管理 app),前提是您同意不会直接或间接引导 iOS 用户使用非 App 内购买项目机制进行购买,并且在您介绍其他购买方式的普通沟通中没有刻意阻止用户使用 App 内购买项目。
3.1.3(b) 多平台服务:跨平台运行的 app 可以允许用户访问用户在别处获取的内容、订阅或功能,包括多平台游戏中的消耗品,前提是这些项目也在 app 中以 App 内购买项目的形式提供。您不得直接或间接引导 iOS 用户使用非 App 内购买机制进行购买,在您关于其他购买方式的一般说明中亦不可刻意阻止用户使用 App 内购买项目。
3.1.4 硬件相关内容:在为数不多的情形中,例如当功能依赖于特定的硬件功能时,app 可在不使用 App 内购买项目的情况下解锁相应功能 (例如,天文 app 会在与望远镜同步后增加功能)。与经过批准的实际产品 (如玩具) 配合使用的可选 app 功能可在不使用 App 内购买项目的情况下解锁特定功能,前提是它同时也提供 App 内购买项目选项。您不得要求用户通过购买无关产品或参与广告或市场活动来解锁 app 功能。
3.1.5(a) App 之外的商品和服务:如果 app 允许用户购买将在 app 之外使用的商品或服务,则必须使用 App 内购买项目以外的购买方式来收取相应款项,如 Apple Pay 或传统的信用卡入口。
3.1.5(b) 加密货币:
(i) 钱包:App 可以协助虚拟货币储值,前提是它们由组织类别帐户的开发者提供。
(ii) 挖矿:App 不可参与虚拟货币挖矿,除非处理过程是在设备外进行的 (例如,云端挖矿)。
(iii) 兑换:App 可以通过经批准的交易所协助加密货币交易或传输,前提是它们是由交易所本身提供的。
(iv) 首次代币发行:App 如支持首次代币发行 (“ICO”)、数字加密货币期货交易以及其他数字加密证券或准证券交易,发布方须为已创立的银行、证券公司、期货经纪商 (“FCM”) 或其他经批准的金融机构,并遵守所有相关法律。
(v) 加密货币 app 不可通过完成任务来提供货币,如下载其他 app、鼓励其他用户下载,以及在社交网络发帖等。
3.1.6 Apple Pay:如果 app 使用 Apple Pay,则在销售任何商品或服务之前,必须先向用户提供所有的基本购买信息,并且必须正确使用 Apple Pay 品牌和用户界面元素,具体要求可参考“Apple Pay 识别标志指南 (英文)”和“Human Interface Guidelines (英文)”。使用 Apple Pay 提供重复付款服务的 app 至少需要披露以下信息:
续订周期的时长;除非被取消,否则续订将会继续
每个周期中会提供哪些服务
将向客户收取的实际费用
如何取消
3.1.7 广告:App 内显示的广告必须与 app 的年龄分级相符,允许用户查看用于引导至这个广告的所有信息 (不要求用户离开 app),并且不可涉及基于敏感用户数据的定向或行为广告。敏感的用户数据包括健康/医疗数据 (如来自 HealthKit API 的数据)、学校和课堂数据 (如来自 ClassKit 的数据),或儿童的数据 (如来自儿童类别的 app 的数据),等等。插播广告、会中断或阻止用户体验的广告必须清楚地表明它们属于广告,不得操纵或欺骗用户轻点它们,并且必须提供可以轻松访问和清晰可见的关闭/跳过按钮,按钮大小要足以让用户轻松解除广告。
3.2 其他业务模式问题
下方列表并非详尽清单,并且您提交的 app 可能会导致我们的政策有所更改或更新,但这里有一些额外的应做事宜和勿做事宜需要您谨记在心:

3.2.1 可以接受
(i) 在您的 app 中,出于购买或促销目的而展示您的其他 app,只要您的 app 不只是简单地罗列其他 app。
(ii) 显示或推荐专为经批准的特定需求而设计的第三方 app (如健康管理、航空以及辅助功能等)。您的 app 应能提供持续不断的编辑内容,这样 app 才不会看起来像是个摆设。
(iii) 在租借期限结束后,禁止访问经批准的特定租借内容 (例如电影、电视节目、音乐、图书);所有其他项目服务不得存在过期时间。
(iv) 钱包凭证可用于付款或接收付款、传输交易或是提供身份验证 (例如电影票、优惠券和 VIP 凭据)。如将钱包凭证用作其他用途,则可能会导致 app 被拒,钱包凭据也有可能被撤销。
(v) 保险类 app 必须免费提供,并且必须遵守 app 发布地区的相关法律,且不得使用 App 内购买项目。
(vi) 经批准的非营利组织可以在他们持有的 App 或第三方 app 内进行筹款活动,前提是这些筹款活动必须遵守所有的 App Review 准则并提供 Apple Pay 支持。这类 app 必须披露资金的计划用途,遵守所有必要的当地和联邦政府法律,并且确保向捐款人提供相应的报税收据。在被要求时,还应向 App Review 团队提供其他信息。向捐款人介绍其他非营利组织的非营利组织平台必须确保 app 中列出的每一家非营利组织都已通过非营利组织批准流程。进一步了解如何成为受批准的非营利组织 (英文)。
(vii) App 可允许个人用户使用非 App 内购买项目机制向另一位个人送赠货币式*物,前提为:a) 送赠方拥有决定是否进行送赠的完全自主权,b) 获赠方收取 100% 的*物金额。然而,*物若在任何时间点对应或包含接收任何数字内容或服务,则必须使用 App 内购买项目。
(viii) App 如用于金融交易,投资或资金管理,发布方应为执行此类服务的金融机构,或必须使用由相应机构根据自身条款与条件提供的公共 API。
3.2.2 不可接受
(i) 创建与 App Store 类似且用于显示第三方 app、扩展或插件的界面,或将其作为热门 app 的合集。
(ii) 通过由硬件或操作系统提供的内置功能 (诸如推送通知、照相机或陀螺仪) 或 Apple 服务 (如 Apple Music 访问或 iCloud 存储) 获利。
(iii) 人为地刷广告展示次数或者广告点进次数的 app,以及主要设计目的在于显示广告的 app。
(iv) 在 app 内为慈善机构和募款方筹集资金,除非您是经批准的非营利组织或依上文 3.2.1 (vi) 规定获得了许可。出于以上目的筹集资金的 app 必须在 App Store 上提供免费下载,并只能在 app 之外筹集,例如通过 Safari 浏览器或短信。
(v) 强行限制 app 的用户群,例如限制特定地区或运营商。
(vi) App 应当允许用户直接获得付费购买的项目而无需执行额外的任务,如在社交媒体上发帖、上传通讯录,以及在 app 内签到特定次数等。App 不得要求用户必须先为 app 评分或点评、观看视频、下载其他 app、点击广告或进行其他类似操作,然后才能访问 app 的功能、内容或使用 app,或者接受现金或其他补偿。
(vii) 人为操纵用户在其他服务中的可见性、状态或排名,除非相关服务的条款和条件允许这样做。
(viii) App Store 中不允许分发协助进行二元期权交易的 app。请考虑使用网页版 app。App 如支持差价合约或其他金融衍生工具 (如外汇) 交易,则必须在提供服务的所有司法管辖区获得相应的许可。
(ix) App 不得强制要求用户为 app 评级或点评、下载其他 app,或执行其他类似操作,然后才能访问 app 的功能、内容或者使用 app。
,

4. 设计
Apple 客户非常看重简洁、雅致、创新且易于使用的产品,这也正是我们希望在 App Store 上看到的。您可尽情提供各种优秀设计,但在 App Store 上被获准发布的 app 至少需要满足以下标准。另请记住,即使在 app 获得批准之后,您也应当对其进行更新,确保 app 能正常工作并持续吸引新客户和现有客户。停止服务或体验下降的 app 随时可能会从 App Store 中被移除。

4.1 抄袭者
请拿出您自己的想法。我们知道您有自己的奇思妙想,那么请将它们付诸实际。请不要简单照搬 App Store 上的热门 app,或只是细微修改其他 app 的名称或 UI,就将其挪为己用。这么做不但有引发知识产权侵权索赔的风险,更会加大在 App Store 中浏览的难度,而且对您的开发者同仁来说也不公平。

4.2 *低功能要求
App 应包含功能、内容和 UI,而不仅仅是一个经过重新包装的网站。如果 app 没有什么实用价值、毫无新意或者不太像是一个 app,那它就不适合出现在 App Store 中。如果 app 不能带来持久的娱乐价值,或只是让人感到毛骨悚然,则无法获得批准。如果 app 只是一首歌曲或一部影片,则应提交到 iTunes Store。如果 app 只是一本书籍或游戏指南,则应提交到 iBooks Store。

4.2.1 使用 ARKit 的 app 应提供丰富而完整的增强现实体验,仅将模型放入 AR 视图或重播动画并不足够。
4.2.2 除了目录类 app 之外,app 不应只包含市场营销材料、广告、网络剪报、内容聚合或链接集合。
4.2.3
(i) App 应能独立工作,无需安装其他 app。
(ii) 确保 app 发布时在其二进制文件中包含有正常运行所需的充足内容。
(iii) 如果 app 需要下载其他资源,请披露下载大小并在下载之前提醒用户。现有 app 在 2019 年 1 月 1 日后提交的所有更新都必须遵循这一准则。
4.2.4 与表盘类似的 Apple Watch app 可能会令人感到困惑,因为用户会认为这些 app 能与各种设备功能 (如轻扫、通知和第三方功能栏) 配合使用。将创意性的时间表现方式用作 app 界面是个好点子 (例如,供冲浪者使用的潮汐时钟),但是如果您的 app 与表盘过于相像,则可能会被我们拒*。
4.2.5 主要用作 iCloud 和 iCloud 云盘文件管理器的 app 需要包含更多的 app 功能,才能获得批准。
4.2.6 利用商业化模板或 app 生成服务创建的 app 将被拒*,除非这个 app 由相应内容的提供商直接提交。这些模板服务若要为不同的客户提供差异化的用户体验,可提供工具来帮助客户自行创建创新的 app,但不应代表客户提交 app。模板提供商也可以考虑创建单一的二进制文件,以汇总或“选取”的模型托管所有客户端内容 (例如:在搜索餐厅的 app 里为每个客户餐厅定制独立的条目或页面,或在聚会活动 app 里为每个客户的活动创建单独的条目)。
4.2.7 远程 App 镜像:如果您的远程桌面 app 用作特定软件或服务的镜像,而不是主机设备的普通镜像,则必须符合以下规定:
(a) 主机设备是归用户所有的个人电脑,并且主机和客户端必须通过本地局域网连接。
(b) 客户端中显示的任何软件或服务应在主机设备屏幕上完整呈现,并且不可使用超出远程桌面传输所需的 API 或平台功能。
(c) 所有帐户的创建和管理均必须从主机设备发起。
(d) 客户端上显示的 UI 不与 iOS 或 App Store 视图类似,不提供商店类界面,也不能供用户浏览、选择或购买用户尚未拥有或授权的软件。为明确起见,在镜像的软件中发生的交易不需要使用 App 内购买,前提是这些交易是在主机设备上处理的。
4.3 重复 App
请不要为同一个 app 创建多个套装 ID。如果您的 app 针对特定位置、运动队、大学等存在不同版本,请考虑提交单个 app,并提供 App 内购买项目以提供不同的功能。同时,请避免继续在已有大量类似 app 的类别下进行开发;App Store 上已经有太多模拟放屁、打嗝声音的 app,以及手电筒和爱经 app。上传大量相似版本 app 的开发者会遭到 Apple Developer Program 的除名。

4.4 扩展
托管或包含扩展的 app 必须遵循“App 扩展编程指南 (英文)”或“Safari 浏览器扩展开发指南 (英文)”,如果可行,还应包含诸如帮助屏幕和设置界面在内的一系列功能。您应当在 app 的市场营销文本中清晰且准确地披露提供了哪些扩展,扩展中不可包含营销、广告或 App 内购买项目。

4.4.1 Keyboard 扩展还需要遵循一些额外的规则。
它们必须:

提供键盘输入功能 (如可输入字符);
如果键盘中含有图像或表情符号,请遵循贴纸准则;
提供切换到下一个键盘的方法;
在没有网络连接和不要求完全访问权限的情况下仍能使用;
收集用户活动数据只是为了改进其 Keyboard 扩展在 iOS 设备上的性能。
它们不得:

启动“设置”之外的其他 app;或者
将键盘按键用于其他行为,例如按住 return 键来启动相机等。
4.4.2 Safari 浏览器扩展必须在 macOS 上的*新版 Safari 浏览器上运行。它们不得干扰系统和 Safari 浏览器 UI 元素,并*不能包含恶意或误导性的内容或代码。违背此规则会遭到 Apple Developer Program 除名。除了正常工作所必需的网站,Safari 浏览器扩展不得要求访问更多网站。
4.4.3 表情贴纸
表情贴纸是让“信息”变得更动态、更有趣的*佳方式,让人们能够以更巧妙、有趣、有意义的方式表达自我。无论您的 app 是含有 Sticker 扩展,还是您要创建单独的表情贴纸包,其内容均不得冒犯用户、造成负面体验或违反相关法律。

(i) 通常,不适合在 App Store 上发布的内容也不适合放入表情贴纸内。
(ii) 考虑地区敏感性,不要在难以接受或者会违反当地法律的国家/地区提供您的表情贴纸包。
(iii) 如果您的表情贴纸含义不易理解,请在审核备注中附上清晰的说明,从而避免导致审核流程的延误。
(iv) 确保您的表情贴纸在您的朋友与家人之外具有相关性;它们不应特定于个人活动、群体或关系。
(v) 您必须对表情贴纸中的内容,持有所有必要的著作权、商标权和形象权及授权许可,不得提交任何未经授权的内容。请记住,您必须能够在要求时提供可核实的文件。若 app 内含有您无权使用的表情贴纸内容,该 app 将从 App Store 中去除,屡次侵权者将从开发者帐户中除名。如果您认为自己的内容遭到其他提供商侵权,请点击此处提交申诉。
4.5 Apple 站点和服务
4.5.1 App 可以使用获批的 Apple RSS Feed (如 iTunes Store RSS Feed),但不能抹除 Apple 站点 (如 apple.com、iTunes Store、App Store、App Store Connect、开发者门户等) 的任何信息,也不能使用这类信息进行排名。
4.5.2 Apple Music
(i) MusicKit API 可以让客户在使用您的 app 时访问自己的订阅。它们旨在为 Apple Music 订阅用户提供轻松简便的音乐播放体验。用户必须能够发起 Apple Music 流媒体播放,并且能够使用“播放”、“暂停”和“跳过”等标准媒体控件来浏览音乐内容。此外,您的 app 不得要求用户通过付款或间接的货币化方式来获取 Apple Music 服务的访问权限 (如 App 内购买项目、广告、要求使用用户信息等)。请勿下载、上传或分享源自 MusicKit API 的音乐文件,除非 MusicKit (英文)文稿中已明确允许。
(ii) 使用 MusicKit API 并不能取代为获得更深入或更复杂的音乐集成而可能需要的授权许可。例如,如果您希望您的 app 在特定时刻播放特定的歌曲,或者创建可以在社交媒体上分享的音频或视频文件,您需要直接联系版权持有人来获得许可 (如同步或改编权利) 和资源。封面插图和其他元数据仅可用于与音乐播放或播放列表相关的用途 (包括展示 app 功能的 App Store 屏幕快照),未经版权持有人明确授权,不得用于任何市场营销或广告目的。在 app 中集成 Apple Music 服务时,请务必遵循“Apple Music 识别标志指南 (英文)”。
(iii) 访问 Apple Music 用户数据 (如播放列表和个人收藏) 的 app 必须在用途字符串中清楚披露这类访问行为。收集的任何数据均不得与第三方分享,也不得用于除支持或改进 app 体验之外的任何其他用途。这类数据不得用于识别用户身份或设备,也不得用于广告定向宣传目的。
4.5.3 不得使用 Apple 服务 (包括 Game Center 或推送通知等) 发送垃圾邮件、进行网络钓鱼,或者向客户发送未经请求的信息。不得尝试进行查找、跟踪、关联、挖掘、获得或利用玩家 ID、别名以及通过 Game Center 获得的其他信息。否则将会遭到 Apple Developer Program 的除名。
4.5.4 App 不得将推送通知列为必需条件,并不能将这项功能用于广告、推广或直接营销用途,或者用来发送敏感的个人或机密信息。不当使用这些服务可能会导致撤销您的权限。
4.5.5 仅以 Game Center 团队批准的方式使用 Game Center 玩家 ID,并不得在 app 中显示或向任何第三方显示。
4.5.6 App 可以在自身和 app 元数据中使用会呈现为 Apple 表情符号的 Unicode 字符。Apple 表情符号不可在其他平台中使用,也不可直接嵌入到您的 app 二进制文件中。
4.6 备选 App 图标
App 可以使用自定图标以传达特定信息 (例如表达对某个运动团队的喜爱),前提是每次更改都由用户发起,并且 app 中应包含恢复至原始图标的设置。所有图标变体必须与 app 的内容相关,并且更改内容在所有系统资源之间应保持一致,以便“设置”和“通知”等位置中显示的图标与新的 Springboard 图标相吻合。这项功能不可用于动态、自动或连续性更改,例如用于反映*新天气信息和日历通知等。

4.7 HTML5 游戏与聊天机器人 (Bot) 等
App 可包含或运行未嵌入二进制文件的代码 (如基于 HTML5 的游戏和聊天机器人等),前提是 app 的主要目的并非代码分发,代码亦没有在商店界面或类似商店的界面中提供,而且相关软件 (1) 为免费软件或需通过 App 内购买项目进行购买;(2) 仅使用标准 WebKit 视图中提供的功能 (例如,它必须在 Safari 浏览器中原生打开和运行,且无需修改也无需其他软件);您的 app 必须使用 WebKit 和 JavaScript Core 来运行第三方软件,且不得试图扩展或披露原生平台 API 给第三方软件;(3) 由已加入 Apple Developer Program 且签署“Apple Developer Program 许可协议”的开发者提供;并且 (4) 遵守各个 App Review 指南中的条款 (例如,不含令人反感的内容;使用 App 内购买项目解锁特性和功能)。在被要求时,您必须提供 app 中所含软件和元数据的索引信息。它必须包含软件提供商的 Apple Developer Program 团队 ID,以及可供 App Review 团队用于确认软件符合上述要求的 URL。

,

5. 法律
只要 app 向某个地区的用户提供,那么就必须遵守该地区的所有法律要求 (如果您不太确定,请与律师联系)。我们知道这些东西非常复杂,但除了下方所列准则以外,同时理解所有本地法律,并确保您的 app 能满足所有法律要求,是您必须承担的责任。当然,如果 app 存在唆使、宣传或鼓励犯罪的行为或明显不负责任的行为,则会被拒*。在发现涉及如方便人口贩卖和/或剥削儿童的 app 的*端情况下,我们将通知有关当局。

5.1 隐私
在 Apple 生态体系中,保护用户隐私总是*要务。您要在处理个人数据时小心谨慎,以确保遵守了隐私保护*佳做法 (英文)、适用的法律和“Apple Developer Program 许可协议 (英文)”中的条款,并满足客户的期望。尤其是:

5.1.1 数据收集和存储
(i) 隐私政策:所有 app 必须在 App Store Connect 元数据栏位和 app 内部包含可轻松访问的隐私政策链接。隐私政策必须明确而清楚地:
指明 app/服务所收集的数据 (若有)、收集数据的方式,以及这些数据的所有用途。
确认与 app 共享用户数据 (遵从这些准则) 的任何第三方 (例如,分析工具、广告网络和第三方 SDK,以及能够访问用户数据的任何母公司、子公司或其他相关实体) 会提供与 app 隐私政策所述及这些准则所要求相同或等同的用户数据保护措施。
解释数据保留/删除政策,并且说明用户可以如何撤销同意和/或请求删除用户数据。
(ii) 许可:收集用户数据或使用数据的 app 必须征得用户的同意。付费功能不得依赖于或要求用户授予访问这些数据的权限。App 还必须为客户提供简单易懂且易于操作的方式来撤销同意。确保您在用途说明中清楚且完整地阐述您对数据的使用。如果 app 依据欧盟《一般数据保护条例》(“GDPR”) 或类似法规,出于合法权益而不经事先同意就收集数据,则必须遵循此类法律的所有条款。进一步了解请求许可 (英文)。
(iii) 数据*少化:App 仅可请求访问与 app 核心功能相关的数据,并且仅可收集和使用完成相关任务所需的数据。若有可能,请使用进程外选取器或共享列表,而不要请求“照片”或“通讯录”等受保护资源的完整访问权限。
(iv) 访问权限:App 必须尊重用户的权限设置,不得操纵、欺骗或强迫用户同意不必要的数据访问。例如,可发布照片到社交网络的 app 不得在允许用户上传照片前要求麦克风访问权限。若有可能,请为不同意的用户提供替代解决方案。例如,如果用户拒*共享位置,请提供手动输入地址的功能。
(v) 帐户登录:如果 app 不包含基于帐户的重要功能,请允许用户在不登录的情况下使用。App 不得要求用户提供个人信息才能正常使用,除非个人信息与 app 的核心功能直接相关,或是法律要求时。如果您的核心 app 功能与特定的社交网络 (如 Facebook、微信、微博或 Twitter 等) 不相关,您必须提供无需登录或其他类似机制的访问权限。调取基本档案信息、分享到社交网络或邀请朋友使用 app 等不视为核心 app 功能。App 还必须包含用于撤销社交网络凭证的机制,以及从 app 内停用 app 与社交网络之间数据访问的机制。App 不可在设备外存储社交网络的凭证或令牌,而且只能使用此类凭证或令牌来在 app 使用期间从 app 本身直接连接社交网络。
(vi) 如果开发者开发的 app 试图暗中收集用户密码或其他用户私人数据,那么开发者会被从 Apple Developer Program 中除名。
(iv) 必须使用 SafariViewController 在显著位置向用户显示信息;不得隐藏这个控制器,也不能被其他视图或图层遮挡。此外,未经用户的知情和同意,app 不得私下利用 Safari 浏览器 ViewController 来追踪用户。
5.1.2 数据使用和共享
(i) 除非法律另有许可,否则您不得未经他人允许而使用、传输或共享他们的个人数据。您必须提供相应的信息,说明以何种方式在哪里使用这些数据。App 收集的数据只有在为了改进 app 或用于广告投放用途 (在遵守 Apple Developer Program 许可协议 (英文)) 的前提下,才能与第三方共享。如果 app 在未经用户同意或未能符合数据隐私保护法律的情况下共享用户数据,则 app 可能会被从销售名单中移除,并且可能会导致您被从 Apple Developer Program 中除名。
(ii) 除非法律另有明确许可,否则未经用户的额外同意,为一个用途而收集的数据不可用于其他用途。
(iii) App 不得试图暗中基于收集的数据构建用户资料,也不得尝试、协助或鼓励他人根据从 Apple 提供的 API 收集的数据,或您所谓以“匿名”、“汇总”或其他不可识别的方式收集的数据来识别匿名用户的身份或重建用户资料。
(iv) 请勿使用来自“通讯录”、“照片”或能访问用户数据的其他 API 的信息来构建联系人数据库,以供自己使用或出售/分发给第三方,也不要收集关于用户设备上安装有哪些 app 的信息,以用于分析或投放广告/市场营销。
(v) 请勿使用通过“通讯录”或“照片”收集的信息来联系用户,除非用户以个人方式明确主动发起联系;请勿包含“全部选择”选项,也不要默认选中所有联系人。在信息发送之前,您必须向用户清楚说明这个信息会如何呈现给收件人 (例如,信息中包含什么内容?发件人显示为谁?)。
(vi) 从 HomeKit API、HealthKit、消费者健康记录 API、MovementDisorder API、ClassKit 或深度图和/或面谱绘制工具 (例如 ARKit、相机 API 或照片 API) 收集的数据,不得用于市场营销、投放广告或基于使用情况进行其他数据挖掘,包括第三方在内。进一步了解实施 CallKit (英文)、HealthKit (英文)、ClassKit (英文) 和 ARKit (英文) 的*佳做法。
(vii) 使用 Apple Pay 的 app 只能与第三方共享通过 Apple Pay 获得的用户数据,以帮助或改进商品或服务的交付。
5.1.3 健康和健康研究
健康、健身和医疗数据特别敏感,涵盖这些领域的 app 必须满足额外的规则,并确保客户隐私受到保护:

(i) App 仅能在获得批准的情况下,出于改进健康管理或健康研究的目的,使用在健康、健身和医疗研究背景下收集的数据 (包括从临床健康记录 API、HealthKit API、“运动与健身”或健康领域人体研究中收集的数据) 或将它披露给第三方,不得用于广告投放、市场营销或基于使用情况进行其他数据挖掘。
(ii) App 不得将虚假或错误数据写入 HealthKit 或其他任何医疗研究/健康管理 App,不得在 iCloud 中存储个人健康信息。
(iii) 开展健康领域人体研究的 app 必须获得参与人员提供的知情同意书,如果涉及未成年人,则必须获得由其家长或监护人提供的知情同意书。上述知情同意书必须涵盖以下内容:(a) 研究的性质、目的和时长;(b) 具体规程,给参与人员带来的风险和益处;(c) 关于保密和数据处理 (包括与第三方共享信息的情况) 的信息;(d) 用于回答参与人员问题的联系人;以及 (e) 退出流程。
(iv) 用于开展健康领域人体研究的 app 必须获得一家独立伦理审查委员会的批准。一经要求,必须提供此类批准的证明。
5.1.4 儿童
出于诸多原因,您在处理儿童的个人数据时必须小心谨慎。我们建议您仔细阅读所有要求,以遵循相关法律,如《儿童在线隐私保护法》(“COPPA”)、和欧盟《一般数据保护条例》(“GDPR”) 和其他国际上适用的同等法律。

App 只能出于遵守适用儿童隐私法规的目的要求用户提供出生日期或家长联系信息,但必须提供一些适用于各年龄层用户的实用功能或娱乐价值。

此外,“儿童类别”中的 app,以及向未成年人收集个人信息 (例如姓名、地址、电子邮件、位置、照片、视频、图画、能否聊天、其他个人数据,或是将永久标识符与以上任何信息组合使用)、传输此类信息或能够共享此类信息的 app,则必须拥有隐私政策,且必须遵守适用的儿童隐私保护法规。为了清楚起见,“儿童类别”的家长监控要求,通常并不完全等同于在这些隐私法规下征得家长的同意后收集个人数据。

5.1.5 定位服务
只有在定位服务与 app 提供的功能和服务直接相关时,才能在 app 中使用定位服务。基于位置的 API 不得用于提供紧急服务,不得对汽车、飞机和其他设备进行自主控制 (小型设备,如轻量无人机和玩具除外),不得遥控汽车防盗系统等。在收集、传输或使用位置数据之前,务必进行通知并获得用户同意。如果 app 会使用定位服务,请务必在 app 中说明相应的原因;请参考“Human Interface Guidelines (英文)”,了解相应的*佳做法。

5.2 知识产权
请确保 app 只包含由您创建或拥有使用许可的内容。如果您已越线并在未经许可的情况下使用了内容,您的 app 可能会被移除。当然,这也意味着如果他人抄袭了您的作品,则他们的 app 也可能会被移除。如果您认为自己的知识产权在 App Store 上受到了其他开发者的侵犯,请通过此网页表格提交权利主张。各个国家/地区的法律互不相同,但请务必避免以下常见错误:

5.2.1 一般性:不得在未经授权的情况下,在 app 中使用受保护的第三方材料 (例如商标、版权作品、专利设计);也不得在 app 套装或开发者名称中包含虚假、抄袭或误导性的演示、名称或元数据。App 提交方应当是拥有或获授权使用知识产权和其他相关权利的个人或法律实体,并且应对提供 app 中的任何服务负责。
5.2.2 第三方站点/服务:如果您的 app 会使用、访问第三方服务、通过访问第三方服务盈利或是显示第三方服务的内容,请确保您获得在该服务的使用条款下进行此类操作的特别许可。如有相应要求,则必须提供相关授权。
5.2.3 音频/视频下载:app 不得促进非法文件共享,或在没有获得这些资源的明确授权的情况下,提供从第三方来源 (如 Apple Music、YouTube、SoundCloud、Vimeo) 保存、转换或下载媒体资源的能力。视频/音频内容流也有可能触犯使用条款,所以请务必在 app 访问这些服务前,进行检查。如有相应要求,则必须提供相关文稿。
5.2.4 Apple 认可:不得误导或暗示 Apple 是 app 的来源或提供商,或者 Apple 以任何形式表示认可其质量或功能。如果您的 app 被选为“编辑选荐”,Apple 将自动显示相应徽章。
5.2.5 Apple 产品:不得创建与现有 Apple 产品、界面 (如 Finder)、app (如 App Store、iTunes Store 或“信息”) 或广告主题外观相似或容易混淆的 app。App 和扩展 (包括第三方键盘和贴纸包) 不得含有 Apple 表情符号。iTunes 音乐预览内容不得用于其娱乐价值 (如用作照片拼贴画的背景音乐或游戏配音) 或其他未获授权的方式。如果 app 显示健身记录圆环,则不应以类似于“健身记录”控件的方式展示“活动”,“锻炼”或“站立”数据。请参考“Human Interface Guidelines (英文)”以了解关于如何使用健身记录圆环的更多信息。
5.3 游戏、赌博和彩票
赌博、游戏和彩票的管理难度大,是 App Store 上受到*多管制的 app 类别之一。只有全面核实了即将发布您的 app 的所有国家/地区的相关法律要求后,才能包含此功能,并且要做好准备此功能的审核流程需要更长的时间。您需要谨记以下事项:

5.3.1 抽*和比赛必须由 app 的开发者赞助。
5.3.2 抽*、比赛和抽彩的正式规则必须在 app 中注明,并且必须明确表示 Apple 不是赞助者,也没有以任何形式参与活动。
5.3.3 App 不得通过 App 内购买项目购买点数或货币,以用于任何种类的真实货币游戏;不得向用户出售彩票或抽彩券;不得在 app 内进行资金转账。
5.3.4 提供真实货币游戏 (例如体育下注、扑克、赌场游戏、赛马) 或彩票的 app 必须在使用该 app 的地区获得必要的许可和批准,且只能在这些地区发布,此类 app 在 App Store 中必须免费提供。App Store 上不允许发布非法的赌博辅助工具,包括记牌器。彩票 app 必须有报酬、几率及*品。
5.4 * App
提供 * 服务的 app 必须利用 NE*Manager API (英文),并且仅可由登记为企业的开发者提供。您必须清楚地声明会收集哪些用户数据,以及将如何使用这些数据。* app 不得违反当地法律,如果您选择在需要 * 许可证的地区发布,则必须在 App Review 注释栏位中提供您的许可证信息。

5.5 开发者行为准则
请尊重每一个人,无论是在 App Store 中回复用户评论、回应客户支持请求时,还是与 Apple 沟通时 (包括您在解决方案中心的回复),都应做到这一点。请勿涉及任何形式的骚扰、歧视、恐吓或霸凌行为,也不要鼓励他人实施任何上述行为。

客户的信任是 App Store 获得成功的基石。App 不得存在以下行为:掠夺用户或试图勒索用户;诱导用户进行非自愿的购买;强迫用户共享不必要的数据;以欺骗的方式抬高价格;针对未交付的功能或内容收取费用;或者在 app 内部或外部实施任何其他操纵行为。

发布日期:2018 年 12 月 19 日

,

提交之后
在 App Store Connect 中提交 app 和元数据之后,您随即就会进入审核流程。请谨记以下几点:

时间:App Review 团队会尽快检查您的 app。不过,如果 app 比较复杂或者存在新的问题,则可能需要更深入的审查和考量。也请记住,如果 app 因为违反同一准则而一再被拒*,或者您曾经试图操纵 App Review 流程,您的 app 将需要更长时间才能完成审核。进一步了解 App Review。
状态更新:App 的当前状态会反映在 App Store Connect 中,所以请多留意此处。
加急请求:如果您遇到了严重的时间问题,可以申请加急审核 (英文)。请仅在您真的需要加快审核时才提出申请,以便其他开发者的加急请求不受影响。如果我们发现您滥用此系统,从此以后我们可能都会拒*您的申请。
发布日期:如果您设定在未来某个日期发布 app,在此日期到来之前,即使这个 app 已获得 App Review 团队的批准,也不会显示在 App Store 上。请注意,您的 app 可能需要长达 24 小时才能显示在所有选定的商店中。
拒*:我们的目标是公平、持续地遵循这些准则,但是人无完人。如果您的 app 被拒*,但您存在疑问,或希望提供其他信息,请使用解决方案中心,以与 App Review 团队直接沟通。这样可以帮助您的 app 出现在商店中,也可帮助我们改进 App Review 流程,并在我们的政策中发现需要阐明的部分。如果您仍对结果不满意,请提交申诉 (英文)。

Ad_Hoc方式打包iOS应用程序

如果想要将做的iOS应用程序安装到自己的iOS设备上测试、或者安装到别人的iOS设备上,或者想发布到App Store中,先要给应用签名。签名就要有证书,这就需要申请证书的过程了。
把自己的应用程序安装到设备中,主要有一下几种方式:
1、 把iOS设备与电脑连接起来,如果Xcode中已经添加了包含这个设备的Profile文件且在工程中已经选择了该文件,那么在Xcode左上角便可以选择这个设备,之后点击RUN,程序就被安装在这个iOS设备中了。这个主要用于在真机上测试程序。
2、 使用Xcode将应用程序以Ad Hoc方式打包,到处ipa文件,然后用iTunes等工具将应用程序安装到iOS中。这种方式的Profile文件主要是Ad Hoc类型,并且包含制定的设备信息。导出的ipa也只能安装到制定的设备中。
3、将应用程序发布到App Store上,待苹果审核通过后,其他人就可以下载安装了。
本文主要讲第二种方法。
制作Profile文件需要经过“添加证书—添加App ID—添加设备—制作Profile文件”四个步骤,下面将分别进行介绍。

**

一、添加证书

%title插图%num

%title插图%num

%title插图%num

%title插图%num

**

接下来要制作一个CSR文件

首先打开钥匙串

%title插图%num

%title插图%num

%title插图%num

%title插图%num

%title插图%num
证书制作完成

**

二、添加App ID
**

%title插图%num

%title插图%num

%title插图%num

%title插图%num
**

三、添加设备
**

%title插图%num

%title插图%num

%title插图%num
**

四、制作Profile文件
**

%title插图%num

%title插图%num

%title插图%num

%title插图%num

%title插图%num

%title插图%num

%title插图%num
**

五、Ad_Hoc方式打包
**

%title插图%num

%title插图%num

%title插图%num

%title插图%num

%title插图%num

%title插图%num

%title插图%num

 

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速