Skip to content

Latest commit

 

History

History
133 lines (92 loc) · 4.49 KB

INSTALL-IOS.md

File metadata and controls

133 lines (92 loc) · 4.49 KB

iOS Setup (REQUIRED)

With yarn

$ yarn add @transistorsoft/capacitor-background-fetch
$ npx cap sync

With npm

$ npm install --save @transistorsoft/capacitor-background-fetch
$ npx cap sync

Cocoapods version

$ pod --version
// if < 1.10.0
$ sudo gem install cocoapods

Configure Background Capabilities

  • Open your XCode project with npx cap open ios.

  • Select the root of your project. Select Capabilities tab. Enable Background Modes and enable the following mode:

  • Background fetch

  • Background processing (:new: iOS 13+; Only if you intend to use BackgroundFetch.scheduleTask)

Configure Info.plist (:new: iOS 13+)

  1. Open your Info.plist and add the key "Permitted background task scheduler identifiers"

  1. Add the required identifier com.transistorsoft.fetch.

  1. If you intend to execute your own custom tasks via BackgroundFetch.scheduleTask, you must add those custom identifiers as well. For example, if you intend to execute a custom taskId: 'com.transistorsoft.customtask', you must add the identifier com.transistorsoft.customtask to your "Permitted background task scheduler identifiers", as well.

⚠️ A task identifier can be any string you wish, but it MUST be prefixed with com.transistorsoft..

BackgroundFetch.scheduleTask({
  taskId: 'com.transistorsoft.customtask',
  delay: 60 * 60 * 1000  //  In one hour (milliseconds)
});

Privacy Manifest

Apple now requires apps provide a Privacy Manifest for "sensitive" APIs which could be abused for "fingerprinting" a user for malicious marketing activity.

If your app does not yet have a Privacy Manifest (PrivacyInfo.xcprivacy), create one now:

ℹ️ Click here for detailed instructions...
  • In XCode, File -> New -> File...:

  • Be sure to enable your Targets: [x] YourApp:

It's best to edit this file's XML manually.

  • 📂 ios/App/PrivacyInfo.xcprivacy
  • Add the following block within the NSPrivacyAccessedAPITypes <array> container:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">
<dict>
    <key>NSPrivacyAccessedAPITypes</key>
    <array>
        <!-- [1] background_fetch: UserDefaults -->
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryUserDefaults</string>

            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>CA92.1</string>
            </array>
        </dict>        
    </array>
</dict>
</plist>

AppDelegate.swift (:new: iOS 13+)

  • Edit your AppDelegate.swift and add the following code:
import UIKit
import Capacitor
+import TSBackgroundFetch

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

+       // [capacitor-background-fetch]
+       let fetchManager = TSBackgroundFetch.sharedInstance();
+       fetchManager?.didFinishLaunching();

        return true
    }

+   // [capacitor-background-fetch]
+   func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
+       print("BackgroundFetchPlugin AppDelegate received fetch event");
+       let fetchManager = TSBackgroundFetch.sharedInstance();
+       fetchManager?.perform(completionHandler: completionHandler, applicationState: application.applicationState);
+   }