RZSafariKeychain 0.1.1

RZSafariKeychain 0.1.1

Tests已测试
Lang语言 Obj-CObjective C
许可证 MIT
Released上次发布2014年12月

Alex Rouse维护。



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钥匙串服务器/配置方面的说明。**

服务器实现

创建您的web credentials JSON文件。

这看起来可能类似这样

{
    "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)

签名JSON文件。

接下来,您需要签名字符串文件以创建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 时发现的一些有用链接的集合。