Latest 1.6.1
Homepage https://github.com/fujifilmssd/iOS-Fujifilm-SPA-SDK-SampleApp
License MIT
Platforms ios 8.0, requires ARC
Frameworks AddressBook, AddressBookUI, MobileCoreServices, SystemConfiguration, AssetsLibrary, ImageIO, Photos
Authors

Fujifilm SPA iOS SDK Tutorial

Introduction

This project is a sample application to demonstrate how to integrate with the Fujifilm SPA iOS SDK.

This document provides a tutorial to use the Fujifilm SPA iOS SDK library in your iOS application.

What is it?

The Fujifilm Smart Publishing API SDK is a native library that you can include in your existing iOS application to enable photo product output through Fujifilm. This provides you with a new revenue stream while providing a new valuable service to your application users.

The Fujifilm SPA SDK gives you access to over 100 popular photo gift products and allows you to control the availability and pricing of each product through our web portal.

Please visit the Fujifilm Developer Network portal to sign-up and obtain an API key, set product pricing, and configure your application. The portal is available at http://www.fujifilmapi.com/.

What’s new?

There are many new items in this release:

  • Completely re-designed GUI
  • Product categorization to help organize the available product set
  • Over 30 new products including items within popular categories such as Home Décor, Photobooks, Greeting Cards and Mobile Device Cases
  • A native Android SDK in addition to our iOS SDK so that you can provide your users with a common experience in either operating system (Android versions 4.4 and above)
  • Updated support for iOS versions 8 and above

Requirements

  • iOS version 8.0 or later
  • Developers using the Fujifilm SPA iOS SDK need to sign up for an account on Fujifilm Developer Network (http://fujifilmapi.com), create an application, obtain an Api Key, and setup catalog products and pricing.

Integration Instructions

Step 1: Get API Key

Sign up for an account on Fujifilm Developer Network (http://fujifilmapi.com), create an application, obtain an API Key, and setup catalog products and pricing.

Step 2: Include Fujifilm SPA SDK

Include the Fujifilm SPA SDK in your Xcode project. To add Fujifilm SPA SDK to your Xcode project, you may install via Cocoapods or add it manually.

Using CocoaPods

For more information on Cocoapods, including instructions on adding a pod to your Xcode project, visit https://cocoapods.org/ and navigate to the Guides section.

This section assumes you have CocoaPods installed on your system.

In your Podfile, include the SPA SDK pod like so:

pod 'Fujifilm-SPA-SDK', '~> 1.6'

Install the pod by running navigating to the project directory in a terminal and running $ pod install. If you have already installed the SDK and would like to update to the latest version, run $ pod update instead.

Upon successful installation, close your Xcode project if it is open, and open the workspace that was generated by Cocoapods.

Manual Installation

Skip this section if you are using CocoaPods!
  1. Download files
  2. Add files to project
    • Open your project in Xcode. Select File > Add Files To “MyApp” and select the files you just downloaded. Check “Copy items if needed” under Destination and select “Create groups” under Added Folders. Make sure your target is checked in the “Add to targets” section. Click Add.
  3. Link with frameworks
    • Add the following frameworks to your project:
      • Accelerate
      • AddressBook
      • AddressBookUI
      • AVFoundation
      • AudioToolBox
      • CoreMedia
      • MobileCoreServices
      • SystemConfiguration
      • AssetsLibrary
      • ImageIO
      • Photos
    • To add frameworks, select your project in the Xcode file explorer. In the main window, the top left corner has a dropdown menu with a list of your projects and targets. Make sure your target is selected (not your project) and switch to the Build Phases tab. Expand the Link Binary With Libraries section and add the frameworks listed above.
  4. In your TARGETS Build settings, add -lc++ to the Other Linker Flags section

Step 3: Updating info.plist file

In order to use the SDK you will need to add keys to your project’s info.plist file.

You can enter all of the keys manually using the Xcode UI, or you can open the info.plist file in a text editor and copy/paste the following in the inside the <plist> <dict> tag.

    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Please enable this feature to search for stores near you when creating personalized prints and gifts.</string>
    <key>NSContactsUsageDescription</key>
    <string>Please enable this feature to access your contacts when creating personalized prints and gifts.</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>Please enable this feature to be able to upload your photos and create personalized prints and gifts.</string>
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>fujifilmesys.com</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSIncludesSubdomains</key>
                <true/>
            </dict>
            <key>paypal.com</key>
            <dict>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSIncludesSubdomains</key>
                <true/>
            </dict>
        </dict>
    </dict>

Step 4: PayPal Payment Option

We offer 2 payment options to users, Credit Card and PayPal. Please follow the steps below to enable PayPal as you’ll typically see a higher conversion rate with it.

Setup for app switch using the CFBundleURLTypes key in info.plist

To accept payments from PayPal, you must register a URL type and configure your app to return from app switches.

Register a URL type
  1. In Xcode, click on your project in the Project Navigator and navigate to App Target > Info > URL Types
  2. Click [+] to add a new URL type
  3. Under Identifier, enter your app’s Bundle ID
  4. Under URL Schemes, enter your app switch return URL scheme. This scheme must start with your app’s Bundle ID and be dedicated to Fujifilm’ SDK app switch returns. For example, if the app bundle ID is com.your-company.Your-App, then your URL scheme could be com.your-company.Your-App.FujifilmSDK.Payments.
  5. If your app is built using iOS 9 as its Base SDK, then you must add URLs to a whitelist in your app’s info.plist:
        <key>LSApplicationQueriesSchemes</key>
        <array>
          <string>com.paypal.ppclient.touch.v1</string>
          <string>com.paypal.ppclient.touch.v2</string>
        </array>
  6. Test your URL type set in step 4 above: Open up Mobile Safari on your iOS Device or Simulator and enter in the URL that you set in step 4 (e.g. com.your-company.Your-App.FujifilmSDK.Payments://test). This should launch your app.

Important: If you have multiple app targets, be sure to add the URL type for all of the targets.

Step 5: Integrate with SDK – Objective-C

If your app is Swift, you can following the instructions found here: Swift Integration.

In your view controller header file, import the SDK:

#import "Fujifilm.SPA.SDK.h"

In your view controller header file, ensure it implements the FujifilmSPASDKDelegate protocol:

@interface ViewController : UIViewController <FujifilmSPASDKDelegate>{}

In your view controller, create a Fujifilm_SPA_SDK_iOS object. Initialize it using the initWithApiKey:environment:images:userID:retainUserInfo:promoCode:launchPage:extraOptions method:

Fujifilm_SPA_SDK_iOS *fujifilmOrderController = [[Fujifilm_SPA_SDK_iOS alloc]         
        initWithApiKey: @"YOUR_API_KEY" //REPLACE with YOUR ApiKey
        environment:  @"Preview"
        images: NS_ARRAY_OF_IMAGES
        userID: @"" //optional
        retainUserInfo: YES
        promoCode: @"" //optional
        launchPage: kHome
        extraOptions: nil];

Parameters

apiKey(NSString*): Fujifilm SPA apiKey you receive when you create your app at http://fujifilmapi.com. This apiKey is environment specific
environment(NSString*): Sets the environment to use. The apiKey must match your app’s environment set on http://fujifilmapi.com. Possible values are “preview” or "production".
images(id): An NSArray* of PHAsset* or NSString* (for public image urls. Must use https://). Array can contain combination of types. Images must be jpeg, png, or heic format and smaller than 20MB. A maximum of 100 images can be sent in a given Checkout process. If more than 100 images are sent, only the first 100 will be processed.
userID(NSString*): Optional parameter. Send in an empty string @"" if you don’t use it. This can be used to link a user with an order. Maximum length is 50 alphanumeric characters.
retainUserInfo(BOOL): Save user information (address, phone number, email) for when the app is used a second time.
promoCode(NSString*): Optional parameter to add a promo code to the order. Contact us through http://fujifilmapi.com for usage and support.
launchPage(enum): The page that the SDK should launch when initialized. Valid values are kHome and kCart. Defaults to kHome
extraOptions(NSDictionary<NSString *, id>*): Optional parameter to set extra options. A dictionary containing optional key/value pairs for configuring the SDK. Currently accepted keys are as follows:
Key Value Description
kSiteDeepLink NSString* Optional parameter to specify which page the user is first presented with when launching the SDK
kEnableAddMorePhotos BOOL Optional parameter to allow the user to select photos from the device’s native gallery while within the SDK to use in addition to those passed in during initialization. Default value is YES

Next, set the Fujifilm_SPA_SDK_iOS object’s delegate to the view controller:

fujifilmOrderController.delegate = self;

Finally, present the Fujifilm_SPA_SDK_iOS object:

[self presentViewController:fujifilmOrderController animated:YES completion:nil];

The FujifilmSPASDKDelegate requires your view controller to implement the method fujifilmSPASDKFinishedWithStatus:(int) statusCode andMessage: (NSString*) message.

When the Fujifilm SPA SDK is finished, it will return to the parent app, calling fujifilmSPASDKFinishedWithStatus:andMessage. You must implement like so:

#pragma mark -
#pragma mark Fujifilm SPA SDK delegate

-(void) fujifilmSPASDKFinishedWithStatus: (int) statusCode andMessage: (NSString*) message{
    NSString *msg;
    switch (statusCode){
        case 0:
            msg = @"Fatal Error";
            break;
        case 1:
            msg = @"No Images Uploaded";
            break;
        case 2:
            msg = @"No Internet";
            break;
        case 3:
            msg = @"Invalid APIKey";
            break;
        case 4:
            msg = @"User Canceled";
            break;
        case 5:
            msg = @"No Valid Images";
            break;
        case 6:
            msg = @"Timeout Error";
            break;
        case 7:
            msg = @"Order Complete";
            break;
        case 8:
            msg = @"Upload Failed";
            break;
        default:
            msg = @"Unknown Error";
    }
    NSLog(@"fujifilmSPASDKFinishedWithStatus: statusCode: %u message: %@", statusCode, msg);
}

The status code will be one of the following values:

statusCode meaning
0 Fatal Error
1 No Images Uploaded
2 No Internet
3 Invalid API Key
4 User Cancelled
5 No Valid Images
6 Time Out
7 Order Complete
8 Upload Failed
9 User ID Invalid Format
10 Promo Code Invalid Format

It is up to your view controller to handle any/all of these cases in fujifilmSPASDKFinishedWithStatus:andMessage as seen above. The status codes and messages are for internal use only; please do not present these to the user.

In addition, the FujifilmSPASDKDelegate has an optional method promoCodeDidFailValidationWithError: (int) error

This method is called when a promotion code that is passed in fails validation in the SDK. The error parameter is an int corresponding to the cause of the failure. Possible error values are provided as an enum (FFPromotionError). Though not required, it is recommended that this method is implemented in order to log issues and/or inform users that their promotion is invalid. An example implementation is given below:

-(void) promoCodeDidFailValidationWithError:(int)error {
    NSString *errorReason;
    switch(error) {
        case kFFPromotionErrorExpired:
            errorReason = @"Promotion Expired";
            break;
        case kFFPromotionErrorNotActivated:
            errorReason = @"Promotion Not Activated";
            break;
        case kFFPromotionErrorInvalidDiscount:
            errorReason = @"Invalid Discount";
            break;
        case kFFPromotionErrorDisabled:
            errorReason = @"Promotion Disabled";
            break;
        case kFFPromotionErrorDoesNotExist:
            errorReason = @"Promotion Does Not Exist";
            break;
        case kFFPromotionErrorFatal:
        default:
            errorReason = @"Fatal Error";
            break;
    }
    NSLog(@”Promotion is invalid. Cause: %@”,errorReason);
}

PayPal Payment Option

In addition to updating your info.plist in Step 4 above, you must also update your application delegate.

Update your application delegate

In your AppDelegate’s application:didFinishLaunchingWithOptions implementation, use setReturnURLScheme: with the value you set above in Step 4:PayPal Payment Option. It’s important that the url you pass in here matches the url that you set in your info.plist for Step 4 above.

For example:

    #import "AppDelegate.h"
    #import "Fujifilm_SPA_SDK_iOS_AppSwitch.h"

    @implementation AppDelegate

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        [Fujifilm_SPA_SDK_iOS_AppSwitch setReturnURLScheme:@"com.your-company.Your-App.FujifilmSDK.Payments"];
        return YES;
    }

Then in your application delegate, pass the payment URL that you set above in Step 4:PayPal Payment Option. Make sure that you change the "com.your-company.Your-App.FujifilmSDK.Payments" from the example below to the url that you set in your info.plist for Step 4 above.

    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000
    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
                options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
        if ([url.scheme localizedCaseInsensitiveCompare:@"com.your-company.Your-App.FujifilmSDK.Payments"] == NSOrderedSame) {
            return [Fujifilm_SPA_SDK_iOS_AppSwitch handleOpenURL:url options:options];
        }
        return NO;
    }
    #endif

    // If you support iOS 7 or 8, add the following method.
    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
      sourceApplication:(NSString *)sourceApplication
             annotation:(id)annotation {
        if ([url.scheme localizedCaseInsensitiveCompare:@"com.your-company.Your-App.FujifilmSDK.Payments"] == NSOrderedSame) {
            return [Fujifilm_SPA_SDK_iOS_AppSwitch handleOpenURL:url sourceApplication:sourceApplication];
        }
        return NO;
    }

Full Example Code

Podfile
pod 'Fujifilm-SPA-SDK', '~> 1.6'
ViewController.h
#import "Fujifilm.SPA.SDK.h"

@interface ViewController : UIViewController <FujifilmSPASDKDelegate>{}

@end
ViewController.m
- (IBAction)launchFujifilmSDK:(id)sender {
    NSArray *images = [[NSArray alloc] initWithObjects:@"https://webservices.fujifilmesys.com/venus/imagebank/fujifilmCamera.jpg",@"https://webservices.fujifilmesys.com/venus/imagebank/mustang.jpg", nil];

    /*
     -------------------------------------------------------------------------------
     Create a Fujifilm_SPA_SDK_iOS instance and present the Fujifilm SDK controller.
     -------------------------------------------------------------------------------

     - Go to http://www.fujifilmapi.com to register for an apiKey.
     - Ensure you have the right apiKey for the right environment.
     //MAKE SURE TO CHANGE YOUR_API_KEY TO YOUR APIKEY!
     */
     Fujifilm_SPA_SDK_iOS *fujifilmOrderController = [[Fujifilm_SPA_SDK_iOS alloc]
     initWithApiKey: @"5cb79d2191874aca879e2c9ed7d5747c"
     environment:  @"Preview"
     images: images
     userID: @"" //optional
     retainUserInfo: YES
     promoCode: @"" //optional
     launchPage: kHome
     extraOptions: nil];

     fujifilmOrderController.delegate = self;
     //Create a new FujifilmSPASDKNavigation Controller with the orderController as its root
     FujifilmSPASDKNavigationController *navController = [[FujifilmSPASDKNavigationController alloc] initWithRootViewController:fujifilmOrderController];
     /*
     ---------------------------------------------------------------------------------------
     Present the Fujifilm SPA SDK Navigation Controller
     ---------------------------------------------------------------------------------------
     */
    [self presentViewController:navController animated:YES completion:nil];
}
-(void) fujifilmSPASDKFinishedWithStatus: (int) statusCode andMessage: (NSString*) message{
    NSString *msg;
    switch (statusCode){
        case 0:
            msg = @"Fatal Error";
            break;
        case 1:
            msg = @"No Images Uploaded";
            break;
        case 2:
            msg = @"No Internet";
            break;
        case 3:
            msg = @"Invalid APIKey";
            //REMOVE THIS ALERT WHEN RELEASING
            [[[UIAlertView alloc] initWithTitle:@"Invalid apiKey!"
                                        message:@""
                                       delegate:nil
                              cancelButtonTitle:@"OK"
                              otherButtonTitles:nil] show];
            break;
        case 4:
            msg = @"User Canceled";
            break;
        case 5:
            msg = @"No Valid Images";
            break;
        case 6:
            msg = @"Timeout Error";
            break;
        case 7:
            msg = @"Order Complete";
            break;
        case 8:
            msg = @"Upload Failed";
            break;
        default:
            msg = @"Unknown Error";
    }
    NSLog(@"fujifilmSPASDKFinishedWithStatus: statusCode: %u message: %@", statusCode, msg);
}
AppDelegate.m

Make sure to change the "com.your-company.Your-App.FujifilmSDK.Payments" to match the URL that you set above in Step 4:PayPal Payment Option. Make sure that you change the "com.your-company.Your-App.FujifilmSDK.Payments" from the example below to the url that you set in your info.plist for Step 4 above.

    #import "AppDelegate.h"
    #import "Fujifilm_SPA_SDK_iOS_AppSwitch.h"

    @implementation AppDelegate

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        [Fujifilm_SPA_SDK_iOS_AppSwitch setReturnURLScheme:@"com.your-company.Your-App.FujifilmSDK.Payments"];
        return YES;
    }

    - (void)applicationWillResignActive:(UIApplication *)application {
    }

    - (void)applicationDidEnterBackground:(UIApplication *)application {
    }

    - (void)applicationWillEnterForeground:(UIApplication *)application {
    }

    - (void)applicationDidBecomeActive:(UIApplication *)application {
    }

    - (void)applicationWillTerminate:(UIApplication *)application {
    }

    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000
    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
                options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
        if ([url.scheme localizedCaseInsensitiveCompare:@"com.your-company.Your-App.FujifilmSDK.Payments"] == NSOrderedSame) {
            return [Fujifilm_SPA_SDK_iOS_AppSwitch handleOpenURL:url options:options];
        }
        return NO;
    }
    #endif

    // If you support iOS 8, add the following method.
    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
      sourceApplication:(NSString *)sourceApplication
             annotation:(id)annotation {
        if ([url.scheme localizedCaseInsensitiveCompare:@"com.your-company.Your-App.FujifilmSDK.Payments"] == NSOrderedSame) {
            return [Fujifilm_SPA_SDK_iOS_AppSwitch handleOpenURL:url sourceApplication:sourceApplication];
        }
        return NO;
    }
    @end

Additional notes and debugging help

The following are some notes to help with integrating with Fujifilm SPA iOS SDK.

Use Requirements:

  • The phone must have internet access to begin the SDK, and must retain access throughout the checkout process. If the connection is lost during the checkout process, an alert will be shown notifying the user that an internet connection is required
  • A maximum of 100 images can be sent to the SDK in a given checkout process. If more than 100 images are sent, only the first 100 will be processed
  • Only jpeg, png, and heic files are supported
  • The maximum size of a single file is 20MB

General Errors

  • Ensure that you updated your info.plist with required data listed above (NSAppTransportSecurity, NSLocationWhenInUseUsageDescription, NSContactsUsageDescription, and NSPhotoLibraryUsageDescription)

Errors that prevent the SDK from Starting

  • 0 valid images
  • No internet access
  • Invalid APIKey. Ensure the APIKey you are using matches the environment string you are passing in (“stage’, “preview”, "production")
  • Missing required frameworks: AddressBook, AddressBookUI, MobileCoreServices, SystemConfiguration, AssetsLibrary, ImageIO, and Photos

Errors that will cancel the SDK

  • Loss of network or internet access before all images have finished uploading
  • All images fail to upload / no remaining images to checkout with

These errors will return control back to the parent app and call fujifilmSPASDKFinishedWithStatus:andMessage with status code and message corresponding to the cause of the error.

Errors that will prevent a specific picture from uploading or being processed

  • An image is over 20MB
  • An image is of an unsupported file format
    Image file is corrupt or is uploaded unsuccessfully, making it corrupt

These Errors will not cancel the SDK, and as such, they will not directly return an error code to fujifilmSPASDKFinishedWithStatus:andMessage. However, if enough images are removed such that 0 images are remaining then the SDK will be terminated.

Feedback

We’re very interested in your feedback! If you run into any trouble, have a suggestion, or want to let us know what worked well send us an email to [email protected] or use the web form at https://www.fujifilmapi.com/contact-us.

License

IMPORTANT – PLEASE READ THE FOLLOWING TERMS AND CONDITIONS CAREFULLY BEFORE USING THE FOLLOWING COMPUTER CODE (THE “CODE”). USE OF THE CODE IS AT YOUR OWN RISK. THE CODE IS PROVIDED “AS IS”, WITH ANY AND ALL FAULTS, DEFECTS AND ERRORS, AND WITHOUT ANY WARRANTY OF ANY KIND. FUJIFILM DISCLAIMS ALL WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, WITHOUT LIMITATION, ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT, WITH RESPECT TO THE CODE OR DEFECTS IN OPERATION OR ANY PARTICULAR APPLICATION OR USE OF THE CODE. FUJIFILM DOES NOT WARRANT THAT THE CODE WILL MEET YOUR REQUIREMENTS OR EXPECTATIONS, THAT THE CODE WILL WORK ON ANY HARDWARE, OPERATING SYSTEM OR WITH ANY SOFTWARE, THAT THE OPERATION OF THE CODE WILL BE UNINTERRUPTED, FREE OF HARMFUL COMPONENTS OR ERROR-FREE, OR THAT ANY KNOWN OR DISCOVERED ERRORS WILL BE CORRECTED.
FUJIFILM SHALL NOT BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY LOSS OF PROFIT, LOSS OF DATA, COMPUTER FAILURE OR MALFUNCTION, INTERRUPTION OF BUSINESS, OR OTHER DAMAGE ARISING OUT OF OR RELATING TO THE CODE, INCLUDING, WITHOUT LIMITATION, EXEMPLARY, PUNITIVE, SPECIAL, STATUTORY, DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, TORT OR COVER DAMAGES, WHETHER IN CONTRACT, TORT OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, DAMAGES RESULTING FROM THE USE OR INABILITY TO USE THE CODE, EVEN IF FUJIFILM HAS BEEN ADVISED OR AWARE OF THE POSSIBILITY OF SUCH DAMAGES.

Latest podspec

{
    "name": "Fujifilm-SPA-SDK",
    "version": "1.6.1",
    "summary": "Enable photo product output through Fujifilm! Access over 50 photo products and control the availability and pricing through fujifilmapi.com",
    "description": "Enable photo product output through Fujifilm! Gives you access to over 100 popular photo gift products and allows you to control the availability and pricing of each product through our web portal. Please visit http://www.fujifilmapi.com to sign-up and obtain an API key, set product pricing, and configure your application.",
    "homepage": "https://github.com/fujifilmssd/iOS-Fujifilm-SPA-SDK-SampleApp",
    "license": {
        "type": "MIT",
        "file": "LICENSE.md"
    },
    "authors": {
        "Jonathan Nick": "[email protected]"
    },
    "source": {
        "git": "https://github.com/fujifilmssd/iOS-Fujifilm-SPA-SDK-SampleApp.git",
        "tag": "1.6.1"
    },
    "platforms": {
        "ios": "8.0"
    },
    "requires_arc": true,
    "source_files": [
        "Fujifilm_SPA_SDK_iOS_DemoApp/Fujifilm.SPA.SDK.h"
    ],
    "public_header_files": "Fujifilm_SPA_SDK_iOS_DemoApp/Fujifilm.SPA.SDK.h",
    "preserve_paths": "Fujifilm_SPA_SDK_iOS_DemoApp/libFujifilm_SPA_SDK_iOS.a",
    "ios": {
        "vendored_libraries": "Fujifilm_SPA_SDK_iOS_DemoApp/libFujifilm_SPA_SDK_iOS.a"
    },
    "frameworks": [
        "AddressBook",
        "AddressBookUI",
        "MobileCoreServices",
        "SystemConfiguration",
        "AssetsLibrary",
        "ImageIO",
        "Photos"
    ]
}

Pin It on Pinterest

Share This