🐱

特定のSchemeのときにのみ、プログラムを実行させる(Xcode, Swift)

2020/10/14に公開

概要

  • Schemeの切り替えによって、特定のプログラムのみ実行させるようなことをしたい。
    • 具体的にはSchemeがFlashCardsToolingのとき、サンプルのrealmファイルを作成するようなことがしたい。
    • 加えてシュミレーターで実行時のみ実行するようにする。

image

実装

プロジェクト設定

  • 下記の通りフラグを設定する。

image

Tools.swift

  • サンプルのrealmファイルを作成するための関数。
  • 概要の条件の場合にのみ、realmファイルを作成させます。
struct Tools {
  // (省略)
  static func runIfNeeded() {
    guard ProcessInfo.processInfo.environment["SIMULATOR_UDID"] != "",  // シュミレーター上で動いていないならreturn
          ProcessInfo.processInfo.environment["TOOLING"] == "1" else {  // SchemeがFlashCardsToolingになっていないならreturn
      return
    }
    
    createBundledWordsRealm()
    createBundledSetsRealm()
    exit(0)
  }
}

AppDelegate.swift

  • 先述の関数をAppDelegate.swiftで下記のように呼びだします。
class AppDelegate: UIResponder, UIApplicationDelegate {
  var window: UIWindow?

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    Tools.runIfNeeded()

参考

Discussion