2017-06-06 10 views
-2

Apple hat Generic Keychain Probe zur Verfügung gestellt, die in Swift geschrieben wird, möchte ich mit Objective-C.Schlüsselbund teilen zwischen zwei apps

Ich habe die Freigabe von Schlüsselbund sowohl in den Apps als auch auf canOpenUrl aktiviert Ich kann Anwendung B von A aufrufen, jetzt möchte ich Benutzername und Passwort von App A zu App B teilen. App ID ist für beide Anwendungen gleich.

Ich habe mir verschiedene Tutorials angesehen, die auch kein Drittanbieter-Projekt verwenden wollen. Könnte kam nicht zu wissen, wie der Parameter von App A App B.

+1

Vielleicht hilfreich: http://evgenii.com/blog/sharing-keychain-in-ios/ – shallowThought

Antwort

1

Keychain Freigabe aktivieren:

  1. Aktivieren Sie die Keychain Sharing-Funktion.
  2. Wählen Entwicklerteam
  3. sinnvoll (zB testKeychainG1)
  4. öffnen .entitlements Datei und ersetzen $ (AppIdentifierPrefix) mit dem APP-ID etwas Keychain Gruppennamen angeben (zB AB123CDE45.testKeychainG1)

Zugriff auf Schlüsselanhänger (gemeinsam Artikel Retrieve):

let itemKey = "Item Key" 

let keychainAccessGroupName = "AB123CDE45.testKeychainG1" 


let query:[String:Any] = [ 
    kSecClass as String: kSecClassGenericPassword, 
    kSecAttrAccount as String: itemKey, 
    kSecReturnData as String: kCFBooleanTrue, 
    kSecMatchLimit as String: kSecMatchLimitOne, 
    kSecAttrAccessGroup as String: keychainAccessGroupName 
] 

var result: AnyObject? 

let resultCodeLoad = withUnsafeMutablePointer(to: &result) { 
    SecItemCopyMatching(query as CFDictionary, UnsafeMutablePointer($0)) 
} 

if resultCodeLoad == noErr { 
    if let result = result as? Data, 
     let keyValue = NSString(data: result, 
           encoding: String.Encoding.utf8.rawValue) as? String { 

     // Found successfully 
     print(keyValue) 
    } 
} else { 
    print("Error: \(resultCodeLoad)") 
} 
-1

Schritt 1 weitergeben müssen:
Set URL Schemes und fügen Sie die AppA ‚s URL-Schema auf die AppB ‚s info.plist wie folgt aus: <key>LSApplicationQueriesSchemes</key> <array> <string>Aapp_Scheme</string> </array>

Schritt 2:
In App A:

let url = URL.init(string: "B_Scheme://name=Obama&password=Trump"); 
    if UIApplication.shared.canOpenURL(url) { 
     UIApplication.shared.open(url, options: ["":""], completionHandler: nil); 
    } 

Schritt 3:
In App AppDelegate.swift der B den Code hinzufügen:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 
    var name = "", password = ""; 
    let param = url.absoluteString.replacingOccurrences(of: "B_Scheme://", with: ""); 
    let paramArray = param.components(separatedBy: "&"); 
    for temp in paramArray { 
     if (temp.range(of: "name=") != nil){ 
      name = temp.replacingOccurrences(of: "name=", with: ""); 
     } 
     else if (temp.range(of: "password=") != nil){ 
      password = temp.replacingOccurrences(of: "password=", with: ""); 
     } 
    } 
    if name == "Obama" && password == "Trump" { 
     print("get param success!"); 
    } 
    return true; 
} 
+0

Ich habe versucht, es funktioniert, aber nicht sichere Möglichkeit, sensible Informationen zu übergeben. – jesy

+0

Und Sie können die Nachrichten der anderen App bekommen? – Kira

Verwandte Themen