Verwenden eines generierten iOS-SDK (Swift) zum Aufrufen der API
Bevor Sie mit folgendem Verfahren beginnen, müssen Sie die Schritte in Generieren von SDKs für eine API mit der API Gateway-Konsole für iOS in Swift durchführen und die ZIP-Datei des generierten SDK herunterladen.
Themen
AWS Mobile SDK und ein von API Gateway generiertes SDK in einem Swift-Projekt installieren
Im folgenden Verfahren wird beschrieben, wie Sie das SDK installieren.
So installieren und verwenden Sie von API Gateway generiertes iOS-SDK in Swift:
-
Extrahieren Sie den Inhalt der von API Gateway generierten ZIP-Datei, die Sie zuvor heruntergeladen haben. Wenn Sie die SimpleCalc-API, sollten Sie den nicht komprimierten SDK-Ordner in sowas wie
sdk_swift_simple_calc
umbenennen. In diesem SDK-Ordner sind eineREADME.md
-Datei und einePodfile
-Datei enthalten. DieREADME.md
-Datei enthält die Anweisungen für die Installation und Verwendung des SDK. Dieses Tutorial bietet Details zu diesen Anweisungen. Die Installation nutzt CocoaPodszum Importieren der erforderlichen AWS-Mobile SDK-Komponenten. Aktualisieren Sie die Podfile
, um die SDKs in das Xcode-Projekt Ihrer Swift-App zu importieren. Der nicht archivierte SDK-Ordner enthält auch einengenerated-src
-Ordner mit dem Quellcode des generierten SDK Ihrer API. -
Starten Sie Xcode und erstellen Sie ein neues iOS Swift-Projekt. Notieren Sie das Projektziel. Sie müssen die entsprechende Einstellung in der
Podfile
vornehmen. -
Gehen Sie wie folgt vor, um die erforderlichen AWS-Mobile SDK-Komponenten mithilfe von CocoaPods in das Xcode-Projekt zu importieren:
-
Wenn es nicht installiert ist, installieren Sie CocoaPods, indem Sie den folgenden Befehl in einem Terminalfenster ausführen:
sudo gem install cocoapods pod setup
-
Kopieren Sie die
Podfile
-Datei vom extrahierten SDK-Ordner in dasselbe Verzeichnis, das Ihre Xcode Projektdatei enthält. Ersetzen Sie den folgenden Block:target '
<YourXcodeTarget>
' do pod 'AWSAPIGateway', '~> 2.4.7' endmit dem Zielnamen Ihres Projekts wie dargestellt:
target '
app_swift_simple_calc
' do pod 'AWSAPIGateway', '~> 2.4.7' endWenn Ihr Xcode-Projekt bereits eine
Podfile
mit dem korrekten Ziel enthält, können Sie einfach die folgende Codezeile zurdo ... end
-Schleife hinzufügen:pod 'AWSAPIGateway', '~> 2.4.7'
-
Öffnen Sie ein Terminalfenster und führen Sie den folgenden Befehl im App-Verzeichnis aus:
pod install
Dadurch werden die API-Gateway-Komponente und alle abhängigen AWS Mobile SDK-Komponenten im Projekt der App installiert.
-
Schließen Sie das Xcode-Projekt und öffnen Sie anschließend die
*.xcworkspace
-Datei, um Xcode neu zu starten. -
Fügen Sie alle SDK-Header-Dateien (
.h
) und Swift-Quellcodedateien (.swift
) aus dem extrahiertengenerated-src
-Verzeichnis zu Ihrem Xcode-Projekt hinzu. -
Um das Aufrufen der Objective-C-Bibliotheken des AWS-Mobile SDK aus Ihrem SWIFT-Code-Projekt zu aktivieren, legen Sie den Dateipfad
Bridging_Header.h
auf der Eigenschaft Objective-C Bridging Header unter der Einstellung Swift Compiler - General Ihrer Xcode-Projektkonfiguration fest:Tipp Sie können im Suchfeld von Xcode
bridging
eingeben, um die Eigenschaft Objective-C Bridging Header zu suchen. -
Erstellen Sie das Xcode-Projekt, um zu überprüfen, dass es ordnungsgemäß konfiguriert wurde, bevor Sie fortfahren. Wenn Ihr Xcode eine neuere Version von Swift als die für das AWS Mobile SDK unterstützte verwendet, erhalten Sie Swift-Compiler-Fehler. Setzen Sie in diesem Fall die Eigenschaft Use Legacy Swift Language Version auf Yes in der Einstellung Swift Compiler- Version:
Zum Importieren des AWS Mobile SDK for iOS in Swift in Ihr Projekt, indem Sie das AWS Mobile SDK explizit herunterladen oder Carthage
verwenden, befolgen Sie die Anweisungen in der README.md
-Datei, die im SDK-Paket enthalten ist. Stellen Sie sicher, dass Sie nur eine dieser Optionen zum Importieren des AWS Mobile SDK verwenden. -
API-Methoden über das von API Gateway generierte iOS-SDK in einem Swift-Projekt aufrufen
Wenn Sie das SDK mit dem Präfix SIMPLE_CALC
für diese SimpleCalc API mit zwei Modellen zur Beschreibung der Eingabe (Input
) und Ausgabe (Result
) der API-Anforderungen und -Antworten generiert haben, wird im SDK die resultierende API-Client-Klasse zu SIMPLE_CALCSimpleCalcClient
und die entsprechenden Datenklassen sind SIMPLE_CALCInput
bzw. SIMPLE_CALCResult
. Die API-Anfragen und-Antworten sind den SDK-Methoden wie folgt zugeordnet:
-
Die API-Anfrage
GET /?a=...&b=...&op=...
wird die SDK-Methode
public func rootGet(op: String?, a: String?, b: String?) -> AWSTask
Die Eigenschaft
AWSTask.result
ist vom TypSIMPLE_CALCResult
, wenn das ModellResult
zur Methodenantwort hinzugefügt wurde. Andernfalls ist sie vom TypNSDictionary
. -
Diese API-Anfrage
POST / { "a": "Number", "b": "Number", "op": "String" }
wird die SDK-Methode
public func rootPost(body: SIMPLE_CALCInput) -> AWSTask
-
Die API-Anfrage
GET /{a}/{b}/{op}
wird die SDK-Methode
public func aBOpGet(a: String, b: String, op: String) -> AWSTask
Im folgenden Verfahren wird beschrieben, wie die API-Methoden im Swift-App-Quellcode aufgerufen werden, z. B. als Teil des viewDidLoad()
-Delegaten in einer ViewController.m
-Datei.
So rufen Sie die API über das von API Gateway generierte iOS-SDK auf:
-
Instanziieren Sie die API-Client-Klasse:
let client = SIMPLE_CALCSimpleCalcClient.default()
Um Amazon Cognito mit der API zu verwenden, legen Sie eine Standard-AWS-Service-Konfiguration fest (siehe unten), bevor Sie die
default
-Methode (siehe oben) aufrufen:let credentialsProvider = AWSCognitoCredentialsProvider(regionType:
AWSRegionType.USEast1
, identityPoolId: "my_pool_id
") let configuration = AWSServiceConfiguration(region:AWSRegionType.USEast1
, credentialsProvider: credentialsProvider) AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration -
Rufen Sie die
GET /?a=1&b=2&op=+
-Methode auf, um1+2
durchzuführen:client.rootGet("+", a: "1", b:"2").continueWithBlock {(task: AWSTask) -> AnyObject? in self.showResult(task) return nil }
in der die Hilfsfunktion
self.showResult(task)
das Ergebnis oder den Fehler auf die Konsole druckt, z. B.:func showResult(task: AWSTask) { if let error = task.error { print("Error: \(error)") } else if let result = task.result { if result is SIMPLE_CALCResult { let res = result as! SIMPLE_CALCResult print(String(format:"%@ %@ %@ = %@", res.input!.a!, res.input!.op!, res.input!.b!, res.output!.c!)) } else if result is NSDictionary { let res = result as! NSDictionary print("NSDictionary: \(res)") } } }
In einer Produktion-App können Sie das Ergebnis oder den Fehler in einem Textfeld anzeigen. Die sich ergebende Anzeige ist
1 + 2 = 3
. -
Rufen Sie den
POST /
mit einer Nutzlast aus, um1-2
durchzuführen:let body = SIMPLE_CALCInput() body.a=1 body.b=2 body.op="-" client.rootPost(body).continueWithBlock {(task: AWSTask) -> AnyObject? in self.showResult(task) return nil }
Die resultierende Anzeige ist
1 - 2 = -1
. -
Rufen Sie
GET /{a}/{b}/{op}
auf, um1/2
durchzuführen:client.aBOpGet("1", b:"2", op:"div").continueWithBlock {(task: AWSTask) -> AnyObject? in self.showResult(task) return nil }
Die sich ergebende Anzeige ist
1 div 2 = 0.5
. Hier wirddiv
anstelle von/
verwendet, da die einfache Lambda-Funktion im Backend keine URL-kodierten Pfadvariablen verarbeitet.