ios开发ats,iOS开发者账号多少钱

苹果文档翻译 iOS10 NSAppTransportSecurity

NSAppTransportSecurity (对应的值为字典类型)被用来定义 app 在进行网络请求时的安全设定:为现有安全机制设定特例,或者开启新的安全特性。

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、成都网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的绿春网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

在苹果的开发平台上,有一种被称为 App Transport Security(ATS) 的网络安全机制,适用于 app 以及 app extension,默认开启。这项机制确保 app 在进行网络访问时,使用业界标准的,没有已知重大安全隐患的协议和加密方式,以此确保用户的隐私和数据完整性。从而培养用户对您的 app 的信任。

通过在 info.plist 中配置这个键,开发者可以自定义网络安全策略。例如:

对 NSAppTransportSecurity 的支持自 iOS9.0,OS X v10.11 开始,适用于 app 和 app extension。

自 iOS10.0,macOS 10.12 开始,增加了对下列子键的支持:

对于使用 iOS9.0, OS X v10.11 SDK 及以上的 app 来说,ATS(App Transport Security)默认开启, NSAllowsArbitraryLoads 是字典 NSAppTransportSecurity 的根键,默认值 NO 。

在启用 ATS 的情况下,所有的 HTTP 请求必须为 HTTPS( RFC 2818 ) 连接。任何不安全的 HTTP 请求都将失败。ATS 使用 TLS(Transport Layer Security)v1.2( RFC 5246 )。更多关于安全连接的信息,请查阅 HTTPS Server Trust Evaluation 。

下面是字典 NSAppTransportSecurity 的总体结构,所有键都是非必填项:

可以看出,所有键可以分为两类:主键,这些键用来定义 app 的总体 ATS 策略;子键,即 NSExceptionDomains 下面的键,使用这些键针对某个域名单独配置。

主键包括:

阅读 表2 ,获取关于上述主键的详细信息。

所有的子键都属于 NSExceptionDomain 。向 Info.plist 中添加这一主键:

例如,及时之前设置 NSAllowsArbitraryLoadsInMedia 为 YES,然而 NSExceptionDomain 所代表的域名依然不能访问不安全的媒体内容。

基于这样的设定,可以针对域名进行 ATS 配置,增加或减少安全措施。例如:

还参考 Certificate Transparency ,保证访问特定域名时的安全,详情见 Certificate Transparency 。

NSExceptionDomains 字典构成:

阅读 表3 ,获取关于 NSExceptionDomains 的进一步详细信息。

NSURLSession 以及所有与其相关的 API 都实现了对 ATS 的支持;如果您的 app 基于 iOS9.0 SDK 或 OS X v10.11 SDK 以上版本开发,ATS 自动开启。(较老的 NSURLConnection 同样会在上述 SDK 中开启对 ATS 的支持。)然而,在使用底层网络 API 或第三方网络库时,无法受到 ATS 的保护。

iOS9.0 或 OS X v10.11 以下版本,不支持 ATS, NSAppTransportSecurity 会被操作系统忽略。当 ATS 不可用时,系统将根据 RFC 2818 提供标准的 HTTPS 安全策略,对服务端进行验证。

当您的 app 运行在 iOS9.0 或者 OS X v10.11以下时,网络连接仍然可用,但 ATS 不起作用。

ATS 只针对 公共域名 起效。ATS 对已下连接无效:

为了连接非法域名或本地域名,需要将 NSAllowsLocalNetworking 设置为 YES。

在 ATS 完全开启的情况下,系统要求 app 的 HTTPS 连接必须满足以下要求:

上面的标准,未来可能会发生变化。但不会影响到 app 二进制包的兼容性。

暂略

能否自行改写服务器授信校验规则,取决于 ATS 是否针对某个域名开启。解释如下:

某些对 ATS 的配置会引发 App Store 的审核,开发者必须说明原因。这些键有:

以下是一些原因说明例子,供参考:

向 App Store 提交审核时,开发者应主动提供足够的信息,以便解释 app 无法使用安全连接的原因。

表2列出了 NSAppTransportSecurity 字典所有主键信息,通过定义这些主键,开发者可以配置 app 的网络行为。同 NSExceptionDomains 相关的子键信息请查看表3。

表2 ATS 字典主键

表3列举了用来针对某个域名进行网络安全配置所使用的键。

表3 针对某个域名进行网络安全配置的子键

下面介绍 NSAppTransportSecurity 的常见配置:

不影响整体 ATS 策略,只针对特定服务器进行不安全的网络请求——例如,从图片服务器请求图片——可在 Info.plist 中做如下配置:

重要: 使用上述配置之前,请注意其可能带来的潜在威胁。例如,通过 HTTP 连接从服务器获取媒体资源,可能带来如下风险:

不影响整体 ATS 策略,只针对特定服务器降低 HTTPS 的安全等级——包括使用较老版本的 TLS / SSL 协议,不支持正向保密——可在 Info.plist 中做如下配置:

假设正在开发一款浏览器应用,需要能够让用户访问任意 URL。这种情况下,开发者应该针对受控服务器使用安全连接,例如用于发布 app 更新的服务器。

为了能够让针对受控服务器的访问享受 ATS 保护,同时保证其他不安全访问可用,可在 Info.plist 中做如下配置:

暂略

暂略

[iOS 开发] 如何针对不同环境配置 info.plist 中的信息?

前两天,在适配 HTTPS 时,由于我们的测试环境服务器没有启用 HTTPS,只有正式环境的服务器启用了 HTTPS ,所以在项目中需要针对不同环境做不同的 ATS 配置处理。这个配置也涉及到 info.plist 中 ATS 相关属性的修改,这也就引出了 info.plist 是否可以动态配置的问题了。

一开始,我想 info.plist 本质上是一个 XML 文件,那么 XML文件中可不可以通过 #ifdef DEBUG 宏定义来动态配置呢?然后我就尝试了一下这种做法,结果编译不通过。实践证明此方法不可行。

然后,我又想 build setting 中不是可以分别设置 debug 和 release 模式下的一些参数么,于是到 build setting 中搜索了一下 info.plist,没想到还真有这个模块,release 和 debug 模式的默认值都是 info.plist。

接下来,我自己也复制了一个 info.plist,并改名 infoDebug.plist,然后修改了一些针对 debug 模式的参数,最后回到 build setting 中,将对应的选项值改为 infoDebug.plist,Command+B 编译一下之后,大功告成!

除此之外,如果我们如果需要动态配置开发或者生产网络环境, 以及在多项目和运行中切换环境,可以借助 Xcode 配置文件 xcconfig 来实现。

iOS开发 为app配置代理

由于对某款app的租房信息的筛选条件不满意,所以爬取了它的api以便能够根据自己的需求进行筛选。根据自己的初级爬虫经验,为了防止app封禁我的ip,所以准备通过代理服务器去访问。

过程是相当纠结啊,尝试的太多,这里就只放结论了。

笔者使用的 URLSession ,初始化前配置 URLSessionConfiguration 对象的 connectionProxyDictionary 即可。

特别提醒: host 类型为 String , 而 port 类型为 Int .

ps:使用http时,需要添加ATS白名单

注: 两种代理方式貌似不能同时使用。不确定是因为我测试时上一秒代理还好好的,下一秒就挂了。

一般服务器对于爬虫是不欢迎的。真正的用户操作再快都需要一定的时间,而爬虫访问时间很短,因此相当规模的爬虫对服务器造成的负担就更大。所以服务器会对爬虫做检测,如果被抓到则可能被封掉ip或像本例一样返回其他网站。

针对检测,我们的做法就是要伪装成真正的用户。以笔者目前的理解有两点:

1. 修改请求头。通过Charles抓包可以看到一次请求的头部信息,对照修改

2. 设定访问延时。手速再快你也快不过自动运行的程序吧。

参考链接:

ps: 一个不错的爬虫学习系列

过程中遇到最多的就是1200错误码:无法与服务器建立安全连接。网上大多数意见是服务器SSL版本不够,因为iOS最低要求使用TLSv1.2的版本。对于更低一点的,就需要特别指定版本。( 由于我这里是代理字典https key用错了,才导致的1200。所以只能先在这mark一下 )

以下是网上给出的解决方法:

这是一个测试TLS的控制台命令:

nscurl --ats-diagnostics --verbose

这里能自动测试哪种key能通过,随便找个https的网站试一下吧。

附上 connectionProxyDictionary keys 参见 Table 3-7

iOS ATS / HTTPS的问题

App Transport Security应用程序传输安全机制

iOS 9起苹果就开始推荐使用HTTPS,iOS 9中默认是禁止非HTTPS的协议来访问网络的.

2017年1月1日起苹果提出所有新提交的App默认不允许使用NSAllowsArbitraryLoads来绕过ATS的限制。

也就是说强制我们用HTTPS,

是从哪里买的或者是使用限时免费版只要符合苹果官方的证书要求,具体要求参考: Apple-NSAppTransportSecurity 。那么什么都不要设置,只需要启用项目的ATS,就可以HTTPS请求了。。

如果还想添加其它只支持HTTP的请求,按前面Exception Domains的设置即可。

ios开发 ats 会影响 调用js方法吗

会,以下是方法:

在Plugins下新建文件(在Plugins上右键-new file选择Objective-c class)输入名字(CDVMyPlugin) next……

这世间你会发现在Plugins下面有两个文件,分别是:CDVMyPlugin.h和CDVMyPlugin.m

CDVMyPlugin.h内容:

#import Foundation/Foundation.h

#import Cordova/CDVPlugin.h

@interface CDVMyPlugin : CDVPlugin

@property (nonatomic, copy) NSString* callbackID;

// Instance Method

- (void) print:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options;

@end

CDVMyPlugin.m内容

#import "CDVMyPlugin.h"

@implementation CDVMyPlugin

@synthesize callbackID;

-(void)print:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options

{

// 这是classid,在下面的PluginResult进行数据的返回时,将会用到它

self.callbackID = [arguments pop];

// 得到Javascript端发送过来的字符串

NSString *stringObtainedFromJavascript = [arguments objectAtIndex:0];

// 创建我们要返回给js端的字符串

NSMutableString *stringToReturn = [NSMutableString stringWithString: @"我是返回的:"];

[stringToReturn appendString: stringObtainedFromJavascript];

// Create Plugin Result

CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString: stringToReturn];

NSLog(@ "%@",stringToReturn);

// 检查发送过来的字符串是否等于"HelloWorld",如果不等,就以PluginResult的Error形式返回

if ([stringObtainedFromJavascript isEqualToString:@"HelloWorld"] == YES){

// Call the javascript success function

[self writeJavascript: [pluginResult toSuccessCallbackString:self.callbackID]];

} else{

// Call the javascript error function

[self writeJavascript: [pluginResult toErrorCallbackString:self.callbackID]];

}

}

JS封装通用调用方法

//调用IOS方法插件

var MyIOSPlugin = {

/**

* 调用IOS方法

* @param method 要调用IOS插件的方法名

* @param parameter 参数[数组]

* @param success 成功回调

* @param fail 失败回调

* @returns {*}

*/

nativeFunction: function(method, parameter, success, fail) {

return Cordova.exec(success, fail, "MyPlugin", method, parameter);

}

};

JS调用

MyIOSPlugin.nativeFunction("print",['HelloWorld'],

function(result) {

// alert("Success: \r\n"+result);

},

function(error) {

// alert("Error: \r\n"+error);

}

);

配置插件KEY-VALUE

feature name="MyPlugin"

param name="ios-package" value="CDVMyPlugin" /

/feature


当前文章:ios开发ats,iOS开发者账号多少钱
当前地址:http://azwzsj.com/article/dsdhhoo.html