LoginSignup
16
9

More than 3 years have passed since last update.

[swift5]iOSアプリでApp Groupsを実装

Posted at

アプリ間でのデータ共有を実装する方法を紹介します!
本ページでは、App Groups を利用します。

動作環境

対象 バージョン
iOS 13.3
macOS Catalina 10.15.2
Xcode 11.3.1
Swift 5.1.3

データ共有機能(App Groups)の実装

アプリ間でデータを共有するため、アプリは2つ作成します。

  1. データを表示・変更するアプリ
  2. データを表示のみするアプリ

1, 2 で同じデータを表示します。

アプリの設定(2つのアプリ共通)

2つのアプリで設定してください。

  1. 「Signing & Capabilities」から「App Groups」を追加する
  2. グループ名を追加する

ファイル作成(2つのアプリ共通)

  • Storyboard
    • ここでは、"AppGroups.storyboard" とします
  • ViewController.swift
    • ここでは、"AppGroupsViewController.swift" とします

画面を作成(データを表示・変更するアプリ)

Storyboard に、以下を載っけます。

  1. 共有データを表示するラベル
  2. 共有データを変更するテキストフィールド
  3. 共有データを変更するボタン

画面とソースの紐付け(データを表示・変更するアプリ)

ソースコード上に紐付けします。

/// 共有データを表示するラベル
@IBOutlet weak var valueLabel: UILabel!
/// 共有データを変更するテキストフィールド
@IBOutlet weak var updateValueTextField: UITextField!
/// 変更ボタンを押下した際の処理
/// - Parameter sender: 変更ボタン
@IBAction func updateValueButton(_ sender: Any) {
    valueLabel.text = updateValueTextField.text

    let userDefaults = UserDefaults(suiteName: groupID)
    userDefaults?.set(valueLabel.text, forKey: "DataStore")
}

ソースコード(データを表示・変更するアプリ)

import UIKit

class AppGroupsViewController: UIViewController {

    let groupID = "(グループ名を記入してください)"
    /// 共有データを表示するラベル
    @IBOutlet weak var valueLabel: UILabel!
    /// 共有データを変更するテキストフィールド
    @IBOutlet weak var updateValueTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        let userDefaults = UserDefaults(suiteName: groupID)
        userDefaults?.register(defaults: ["DataStore": "default"])
        valueLabel.text = userDefaults?.object(forKey: "DataStore") as? String
    }

    /// 変更ボタンを押下した際の処理
    /// - Parameter sender: 変更ボタン
    @IBAction func updateValueButton(_ sender: Any) {
        valueLabel.text = updateValueTextField.text

        let userDefaults = UserDefaults(suiteName: groupID)
        userDefaults?.set(valueLabel.text, forKey: "DataStore")
    }
}

画面を作成(データを表示のみするアプリ)

Storyboard に、以下を載っけます。

  1. 共有データを表示するラベル

画面とソースの紐付け(データを表示のみするアプリ)

ソースコード上に紐付けします。

ソースコード(データを表示のみアプリ)

import UIKit

class AppGroupsViewController: UIViewController {

    let userDefaults = UserDefaults.standard
    let groupId = "(グループ名を記入してください)"

    /// 共有データを表示するラベル
    @IBOutlet weak var valueLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        let userDefaults = UserDefaults(suiteName: groupId)
        userDefaults?.register(defaults: ["DataStore": "default"])
        valueLabel.text = userDefaults?.object(forKey: "DataStore") as? String
    }
}
16
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
9