| <h2>1. Integrate ApigeeiOSSDK.framework</h2> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <a class="jumplink" name="add_the_sdk_to_an_existing_project"></a> |
| <ul class="nav nav-tabs" id="myTab"> |
| <li class="active"><a data-toggle="tab" href="#existing_project">Existing |
| project</a></li> |
| <li><a data-toggle="tab" href="#new_project">New project</a></li> |
| </ul> |
| <div class="tab-content"> |
| <div class="tab-pane active" id="existing_project"> |
| <p>If you've already got an Xcode iOS project, add it into |
| your project as you normally would.</p> |
| <div id="collapse"> |
| <a class="btn" data-toggle="collapse" href="#framework_collapse">Details</a> |
| </div> |
| <div class="collapse" id="framework_collapse"> |
| <ol> |
| <li> |
| <p>Locate the SDK framework file so you can add it to your |
| project. For example, you'll find the file at the following |
| path:</p> <pre> |
| <sdk_root>/bin/ApigeeiOSSDK.framework</pre> |
| </li> |
| <li>In the <strong>Project Navigator</strong>, click on |
| your project file, and then the <strong>Build Phases</strong> |
| tab. Expand <strong>Link Binary With Libraries</strong>. |
| </li> |
| <li>Link the Apigee iOS SDK into your project. |
| <ul> |
| <li>Drag ApigeeiOSSDK.framework into the Frameworks |
| group created by Xcode.</li> |
| </ul> |
| <p>OR</p> |
| <ol> |
| <li>At the bottom of the <strong>Link Binary |
| With Libraries</strong> group, click the <strong>+</strong> |
| button. Then click <strong>Add Other</strong>. |
| </li> |
| <li>Navigate to the directory that contains |
| ApigeeiOSSDK.framework, and choose the |
| ApigeeiOSSDK.framework folder.</li> |
| </ol> |
| </li> |
| </ol> |
| </div> |
| </div> |
| <div class="tab-pane" id="new_project"> |
| <a class="jumplink" name="create_a_new_project_based_on_the_SDK"></a> |
| <p>If you're starting with a clean slate (you don't have |
| a project yet), you can begin by using the project template |
| included with the SDK. The template includes support for SDK |
| features.</p> |
| <ol> |
| <li> |
| <p>Locate the project template in the expanded SDK. It |
| should be at the following location:</p> <pre> |
| <sdk_root>/new-project-template</pre> |
| </li> |
| <li>In the project template directory, open the project |
| file: Apigee App Services iOS Template.xcodeproj.</li> |
| <li>Get acquainted with the template by looking at its readme |
| file.</li> |
| </ol> |
| </div> |
| </div> |
| <h2>2. Add required iOS frameworks</h2> |
| <p> |
| Ensure that the following iOS frameworks are part of your project. To |
| add them, under the <strong>Link Binary With Libraries</strong> group, |
| click the <strong>+</strong> button, type the name of the framework |
| you want to add, select the framework found by Xcode, then click <strong>Add</strong>. |
| </p> |
| <ul> |
| <li>QuartzCore.framework</li> |
| <li>CoreLocation.framework</li> |
| <li>CoreTelephony.framework </li> |
| <li>Security.framework</li> |
| <li>SystemConfiguration.framework</li> |
| <li>UIKit.framework</li> |
| </ul> |
| <h2>3. Update 'Other Linker Flags'</h2> |
| <p> |
| In the <strong>Build Settings</strong> panel, add the following under |
| <strong>Other Linker Flags</strong>: |
| </p> |
| <pre> |
| -ObjC -all_load</pre> |
| <p> |
| Confirm that flags are set for both <strong>DEBUG</strong> and <strong>RELEASE</strong>. |
| </p> |
| <h2>4. Initialize the SDK</h2> |
| <p> |
| The <em>ApigeeClient</em> class initializes the App Services SDK. To |
| do this you will need your organization name and application name, |
| which are available in the <em>Getting Started</em> tab of the <a |
| href="https://www.apigee.com/usergrid/">App Service admin portal</a>, |
| under <strong>Mobile SDK Keys</strong>. |
| </p> |
| <ol> |
| <li>Import the SDK |
| <p>Add the following to your source code to import the SDK:</p> <pre> |
| #import <ApigeeiOSSDK/Apigee.h></pre> |
| </li> |
| <li> |
| <p> |
| Declare the following properties in |
| <code>AppDelegate.h</code> |
| : |
| </p> <pre> |
| @property (strong, nonatomic) ApigeeClient *apigeeClient; |
| @property (strong, nonatomic) ApigeeMonitoringClient *monitoringClient; |
| @property (strong, nonatomic) ApigeeDataClient *dataClient; |
| </pre> |
| </li> |
| <li> |
| <p> |
| Instantiate the |
| <code>ApigeeClient</code> |
| class inside the |
| <code>didFinishLaunching</code> |
| method of |
| <code>AppDelegate.m</code> |
| : |
| </p> <pre> |
| //Replace 'AppDelegate' with the name of your app delegate class to instantiate it |
| AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; |
| |
| //Sepcify your App Services organization and application names |
| NSString *orgName = @"{{currentOrg}}"; |
| NSString *appName = @"{{currentApp}}"; |
| |
| //Instantiate ApigeeClient to initialize the SDK |
| appDelegate.apigeeClient = [[ApigeeClient alloc] |
| initWithOrganizationId:orgName |
| applicationId:appName]; |
| |
| //Retrieve instances of ApigeeClient.monitoringClient and ApigeeClient.dataClient |
| self.monitoringClient = [appDelegate.apigeeClient monitoringClient]; |
| self.dataClient = [appDelegate.apigeeClient dataClient]; |
| </pre> |
| </li> |
| </ol> |
| |
| <h2>5. Verify SDK installation</h2> |
| |
| <p> |
| Once initialized, App Services will also automatically instantiate the |
| <code>ApigeeMonitoringClient</code> |
| class and begin logging usage, crash and error metrics for your app. |
| </p> |
| |
| <p> |
| To verify that the SDK has been properly initialized, run your app, |
| then go to <strong>'Monitoring' > 'App Usage'</strong> in the <a |
| href="https://www.apigee.com/usergrid">App Services admin portal</a> |
| to verify that data is being sent. |
| </p> |
| <p> |
| <img src="img/verify.png" alt="screenshot of data in admin portal" /> |
| </p> |
| <div class="warning">It may take up to two minutes for data to |
| appear in the admin portal after you run your app.</div> |
| |
| <h2>Installation complete! Try these next steps</h2> |
| <ul> |
| <li> |
| <h3> |
| <strong>Call additional SDK methods in your code</strong> |
| </h3> |
| <p> |
| Create an instance of the AppDelegate class, then use |
| <code>appDelegate.dataClient</code> |
| or |
| <code>appDelegate.monitoringClient</code> |
| to call SDK methods: |
| </p> |
| <div id="collapse"> |
| <a class="btn" data-toggle="collapse" href="#client_collapse">Details</a> |
| </div> |
| <div class="collapse" id="client_collapse"> |
| <ul> |
| <li><code>appDelegate.dataClient</code>: Used to access the |
| data methods of the App Services SDK, including those for push |
| notifications, data store, and geolocation.</li> |
| <li><code>appDelegate.monitoringClient</code>: Used to |
| access the app configuration and monitoring methods of the App |
| Services SDK, including advanced logging, and A/B testing.</li> |
| </ul> |
| <h3>Example</h3> |
| <p>For example, you could create a new entity with the |
| following:</p> |
| <pre> |
| AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; |
| ApigeeClientResponse *response = [appDelegate.dataClient createEntity:entity]; |
| </pre> |
| </div> |
| |
| </li> |
| <li> |
| <h3> |
| <strong>Add App Services features to your app</strong> |
| </h3> |
| <p>With App Services you can quickly add valuable features to |
| your mobile or web app, including push notifications, a custom |
| data store, geolocation and more. Check out these links to get |
| started with a few of our most popular features:</p> |
| <ul> |
| <li><strong><a |
| href="http://apigee.com/docs/node/8410">Push notifications</a></strong>: |
| Send offers, alerts and other messages directly to user devices |
| to dramatically increase engagement. With App Services you can |
| send 10 million push notification per month for free!</li> |
| <li><strong><a |
| href="http://apigee.com/docs/node/410">Geolocation</a></strong>: Target |
| users or return result sets based on user location to keep your |
| app highly-relevant.</li> |
| <li><strong><a |
| href="http://apigee.com/docs/node/10152">Data storage</a></strong>: |
| Store all your application data on our high-availability |
| infrastructure, and never worry about dealing with a database |
| ever again.</li> |
| <li><strong><a |
| href="http://apigee.com/docs/node/376">User management and |
| authentication</a></strong>: Every app needs users. Use App Services to |
| easily implement user registration, as well as OAuth |
| 2.0-compliant login and authentication.</li> |
| </ul> |
| </li> |
| <li> |
| <h3> |
| <strong>Check out the sample apps</strong> |
| </h3> |
| <p> |
| The SDK includes samples that illustrate Apigee features. To |
| look at them, open the .xcodeproj file for each in Xcode. To get a |
| sample app running, open its project file, then follow the steps |
| described in the section, <a target="_blank" |
| href="http://apigee.com/docs/app-services/content/installing-apigee-sdk-ios">Add |
| the SDK to an existing project</a>. |
| </p> |
| <p>You'll find the samples in the following location in your SDK |
| download:</p> <pre> |
| apigee-ios-sdk-<version> |
| ... |
| /samples |
| </pre> |
| <div id="collapse"> |
| <a class="btn" data-toggle="collapse" href="#samples_collapse">Details</a> |
| </div> |
| <div class="collapse" id="samples_collapse"> |
| <p>The samples include the following:</p> |
| <table class="table"> |
| <thead> |
| <tr> |
| <th scope="col">Sample</th> |
| <th scope="col">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>books</td> |
| <td>An app for storing a list of books that shows |
| Apigee database operations such as reading, creating, and |
| deleting.</td> |
| </tr> |
| <tr> |
| <td>messagee</td> |
| <td>An app for sending and receiving messages that |
| shows Apigee database operations (reading, creating).</td> |
| </tr> |
| <tr> |
| <td>push</td> |
| <td>An app that uses the push feature to send |
| notifications to the devices of users who have subscribed |
| for them.</td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| <p> </p> |
| </li> |
| </ul> |