RZSafariKeychain是一组类方法,用于简化对钥匙串中用户凭证的访问。
最简单的安装方式是使用Cocoapods。将以下内容添加到您的Podfile中,以使其工作。
pod 'RZSafariKeychain', '~> 0.1'
或者,您可以直接将源文件夹的内容添加到您的项目中。
如果您正在为iOS 7 + 8构建,请确保系统具有访问权限。存在一个类方法可以做到这一点:`+ (BOOL)isSafariKeychainAvailable;
如果设备可以访问Safari钥匙串,您可以提示用户输入其凭证。以下是一个调用示例
[RZSafariKeychain getAccountKeychainCredentialsWithCompletion:^(NSString *accountName, NSString *accountPassword, NSError *error) {
if ( error ) {
NSLog(@"Error getting safari Credentials: %@", error);
}
else {
if ( accountName != nil && accountPassword != nil ) {
self.emailAddressTextField.text = accountName;
self.passwordTextField.text = accountPassword;
}
else {
NSLog( @"Got back an invalid account name or password" );
}
}
}];
**以下readme的其余部分仅是关于设置Safari钥匙串服务器/配置方面的说明。**
这看起来可能类似这样
{
"webcredentials": {
"apps": [ "YWBN8XTPBJ.com.example.myApp",
"YWBN8XTPBJ.com.example.myOtherApp" ]
}
}
请注意,所使用的服务是 'webcredentials',并为应用程序使用的值采用以下形式:`App-ID-Prefix` . `bundleID`
重要提示:上面YWBN8XTPBJ的值是App ID Prefix。这通常与您的TeamID相同,但不总是这样!有关更多详细信息,请参阅此处:[https://developer.apple.com/library/ios/technotes/tn2311/_index.html](https://developer.apple.com/library/ios/technotes/tn2311/_index.html)
接下来,您需要签名字符串文件以创建apple-app-site-association文件。以下脚本可以实现。
cat json.txt | openssl smime -sign -inkey example.com.key
-signer example.com.pem
-certfile intermediate.pem
-noattr -nodetach
-outform DER > apple-app-site-association
您需要获取您的Web服务器的密钥和证书,并在上文中作为`-sign`和`-signer`参数传入。
请注意,您实际的命令可能略有不同,并且除非您有中间证书,大多数命令都不会有 -certfile
。
服务器端配置的最后一步是真正托管文件。它的位置应该是 https://example.com/apple-app-site-association
。
请确保 Content-Type
设置为 application/pkcs7-mime
这通常是容易的部分。
在 XCode 中,转到您的 项目文件
-> 功能
-> 关联域名
并启用它。
在 XCode 中内联点击 +
并按照以下格式添加您的域名:service
:Domain
示例为 webcredentials:www.example.com
。这将更新您的 entitlements.plist,看起来可能像这样。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.associated-domains</key>
<array>
<string>webcredentials:www.example.com</string>
</array>
</dict>
</plist>
对于大多数人来说,您就完成了。很简单。
如果出现问题,您也可以通过开发者门户配置您应用程序的 ID,这也很容易。只需导航到您的应用程序 ID 并添加关联域名。之后,您还需要按照上述格式添加您的域名。
如果您使用企业证书或出于任何其他原因使用通配符应用程序 ID(任何包含 * 的内容),这可能会很麻烦… 您将无法在这些密钥中拥有一个 entitlements.plist。为了绕过这个问题,您可以拥有多个 entitlements.plist 文件,一个用于生产,一个用于企业/通配符。项目构建设置中有一个 code signing entitlements
属性,您可以使用它来根据构建配置进行区分。
这只是我在实施 safari keychain 时发现的一些有用链接的集合。