26937

[code]

    func Sample() {
        let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
        let publicKeyPath = paths[0].stringByAppendingPathComponent("public.pem")
        let privateKeyPath = paths[0].stringByAppendingPathComponent("private.pem")
        let keyPair: (publicKey: SecKey?, privateKey: SecKey?) = generateKeyPair()
    
        do {
            let publicData = try NSData(contentsOfFile: publicKeyPath, options: .DataReadingMappedIfSafe)
            let keyDef = NSUserDefaults.standardUserDefaults()
            keyDef.setObject(publicData, forKey: "pubKeyData")
    
            var pubKeyString = NSString(data: publicData, encoding: NSUTF8StringEncoding)
            print(pubKeyString!)
            let UserId = "sample-sample-sample-sample-sample"
            let dict: [String: AnyObject]? = ["user_id": userId, "public_key": pubKeyString!]
    
        } catch {
    
        }
    }
    
[/code]

# 何をしたいか

鍵を生成しKeyChainに保存したい。

# 実行結果

[code]

    let publicData = try NSData(contentsOfFile: publicKeyPath, options: .DataReadingMappedIfSafe)
    
[/code]

の行で中に入らずcatchしてしまう。

どのように修正するときちんと動いてくれますでしょうか。

# NSError

The file “public.pem” couldn’t be opened because there is no such file.

エラーの通りファイルが見当たらないみたいです。  
どのようにpublicKeyを該当Pathに保存できますでしょうか。


CC BY-SA 3.0
2016-06-22T02:58:19.660
26930
2016-06-22T05:29:50.717
2016-06-22T03:45:13.227
16765
16765
question
swift xcode swift2 xcode7
NSData型への変換について


> エラーの通りファイルが見当たらないみたいです。  
>  どのようにpublicKeyを該当Pathに保存できますでしょうか。

`~/Documents/public.pem` へ publicKey を保存する方法です。

[code]

    func writePublicKey() {
        // 公開鍵
        let publicKey = "xxx-xxx-xxx"
    
        let sharedfileManager = NSFileManager.defaultManager()
        if let documentDirectoryURL = sharedfileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).last {
            let publicKeyFileURL = documentDirectoryURL.URLByAppendingPathComponent("public.pem")
    
            do {
                // 公開鍵を `~/Documents/public.pem` へと書き込みを試みる
                try publicKey.writeToURL(publicKeyFileURL, atomically: true, encoding: NSUTF8StringEncoding)
            } catch {
                // Handle error
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2016-06-22T05:23:02.200
26937
2016-06-22T05:29:50.717
2016-06-22T05:29:50.717
16907
16907
26930
answer