web-dev-qa-db-ja.com

SwiftベースのアプリケーションはOS X 10.9/iOS 7以下で動作しますか?

Swiftベースのアプリケーションは OS X 10.9 (Mavericks)/ iOS 7以下で動作しますか?

例えば、私は OS X 10.8 (Mountain Lion)を走らせているマシンを持っています、そして私がSwiftで書いたアプリケーションがそれで動くかどうか疑問に思います。

610
MeIr

Swiftアプリケーションは標準のバイナリにコンパイルされ、OS X 10.9とiOS 7で実行できます。


テストに使用される簡単なSwiftアプリケーション:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

    var controller = UIViewController()
    var view = UIView(frame: CGRectMake(0, 0, 320, 568))
    view.backgroundColor = UIColor.redColor()
    controller.view = view

    var label = UILabel(frame: CGRectMake(0, 0, 200, 21))
    label.center = CGPointMake(160, 284)
    label.textAlignment = NSTextAlignment.Center
    label.text = "I'am a test label"
    controller.view.addSubview(label)

    self.window!.rootViewController = controller
    self.window!.makeKeyAndVisible()
    return true
}
517
Leandros

SwiftコードはOS X 10.9とiOS 7.0にデプロイできます。通常、古いOSバージョンでは起動時にクラッシュします。

198
Greg Parker

Appleは、SwiftアプリケーションがiOS 7およびOS X Mavericksと下位互換性があることを発表しました。 WWDCアプリはSwiftで書かれています。

104
Ben Gottlieb

更新 - Xcode 6 Beta 4に従って

iOS 7およびOS X 10.9の最小デプロイメントターゲット

SwiftコンパイラとXcodeは、iOS 7またはOS X Mavericksの最低限のデプロイメントターゲットを適用するようになりました。以前のデプロイメントターゲットを設定すると、ビルドが失敗します。

Xcode 6リリースノートから

それで、私の以前の答え(以下に示されている)はそれ以上の開発には当てはまりません。 SwiftはiOS6以下では利用できなくなります


SwiftアプリケーションはiOS 6で実行できます。多くの人がSwiftはiOS 7以降とOS X 10.9以降しかサポートしないと言っていますが、私の経験ではそうではありません。

私はiOS 6デバイスでSwiftで完全に書かれた簡単なアプリケーションをテストしました。それは完全にうまく動きます。 Appleが言うように、SwiftコードはObjective-Cコードとバイナリ互換です。バイナリの作成には同じコンパイラとランタイムを使用します。

これが私がテストしたコードです。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        let button   = UIButton.buttonWithType(UIButtonType.System) as UIButton
        button.frame = CGRectMake(100, 100, 100, 50)
        button.backgroundColor = UIColor.greenColor()
        button.setTitle("Test Button", forState: UIControlState.Normal)
        button.addTarget(self, action: "buttonTapped:", forControlEvents: UIControlEvents.TouchUpInside)

        self.view.addSubview(button)
    }

    func buttonTapped(sender: UIButton!) {
        println("buttonTapped")
    }
}

ボタンをプログラムで追加するだけの簡単なアプリケーションです。私のアプリケーションにはAppDelegate.SwiftViewController.Swiftの2つのファイルしかありません。

したがって、iOS 8 SDKの一部として追加された新しいAPIやSwift固有のAPI(Objective-Cでは対応するAPIは利用できません)を使用していない場合、アプリケーションはiOS 6以降(テスト済みおよび動作中)でもシームレスに動作します。 iOS 5の場合(未テスト)。 SwiftのほとんどのAPIは、既存のObjective-C APIに代わるものです。実際、それらはバイナリで同じです。

注:Swiftアプリケーションのデプロイメント対象のXcode 6 Beta 4によると、iOS 7またはOS X 10.9である必要があります(上記の更新を参照)。したがって、SwiftはiOS6以下では使用できなくなります


100
Anil Varghese

簡単に言うと:

Swiftベースのアプリケーションは、同じアプリで OS X Mavericks または iOS 7 をターゲットに戻すことができます。

それはどのように可能ですか?

Xcodeは 小さなSwiftランタイムライブラリをアプリのバンドル に埋め込みます。ライブラリが埋め込まれているので、あなたのアプリは過去、現在、そして将来のOSリリースで動作するSwiftの一貫したバージョンを使用します。

なぜ私はこの答えを信頼すべきですか?

私がこの答えを言っているのはAppleの一人の人がTwitterで私に言ったように言っているのではなく、hello worldを書いてテストしたからです。

アップルの開発者ブログ から入手しました。

だからあなたはこれを信頼することができます。

33
Durai Amuthan.H

Swiftは Objective-C と同じランタイムを使用し、同じアプリケーション内にObjective-Cを並べて配置することもできます(WWDC 2014基調講演のとおり)。

これは Xcode 6と新しいSDKを使って最終的な答えを見つけるためにチェック/検証する必要があります。

30

いいえ、SwiftはiOS 7未満では動作しません。しかし、 _ yes _ と言ったのですが、Xcode 5と6.0のデプロイメントターゲットで動作するSwiftプロジェクトを作成しました。

  • Swiftプログラミング言語を選択して、デモプロジェクトを Xcode 6 BETA に作成するだけです。
  • Xcode 6ベータ版を閉じて、このデモプロジェクトをデプロイメントターゲット6.0でXcode 5で開きます
  • また、 シミュレータ6.1 を選択します。

それからそのプロジェクトは simulator 6.1 でうまく動きます。私の MacOS Xは10.9.3 なので、私はそう言った、それは iOS 7より低い10.9.3で動く - Mac OS X

これがシミュレータのスクリーンショットです。

Enter image description here

これもデモです

22
Nitin Gohel

コードはそれを確認しますが、Apple自体は、SwiftがiOS 7およびMavericksで技術基調講演(State of the platform、セッション102、約34分00秒のマーク) WWDC 2014 で。

20
virindh

Swiftアプリケーションは iOS 7以降 Beta 4リリースノートに記載されているように/でサポートされます。 xcode 6 BetaのiOS 6.0、6.1、7.0、7.1、8.0

Swiftアプリケーションはプラットフォーム OS X 10.9以降 でサポートされています。 デプロイメントターゲットのOS X 10.4から10.10。 10.5から10.10をターゲットにし、10.9.3で実行することをテストしました

15
vladof81

これは私がApple Swiftブログから読んだ記事です、役に立つかもしれません:

アプリの互換性

あなたがSwiftアプリを書くならば、あなたはあなたのアプリが将来うまくいくであろうと信じることができます。実際、同じアプリで、 OS X MavericksまたはiOS 7 に戻すこともできます。 Xcodeがあなたのアプリのバンドルの中に小さなSwiftランタイムライブラリを埋め込むので、これは可能です。ライブラリが埋め込まれているので、あなたのアプリは過去、現在、そして将来のOSリリースで動作するSwiftの一貫したバージョンを使用します。

バイナリ互換性とフレームワーク

アプリのランタイム互換性は保証されていますが、Swift言語自体も進化し続け、バイナリインタフェースも変わります。安全のために、アプリのすべてのコンポーネントは、同じバージョンのXcodeとSwiftコンパイラを使用して構築されていることを確認してください。

つまり、フレームワークは慎重に管理する必要があります。たとえば、プロジェクトでフレームワークを使用してコードを埋め込みエクステンションと共有する場合は、フレームワーク、アプリケーション、およびエクステンションをまとめて構築する必要があります。 Swiftを使用するバイナリフレームワークに頼るのは危険です - 特に第三者からのものです。 Swiftが変更されると、これらのフレームワークは他のアプリと互換性がなくなります。バイナリインターフェースが1〜2年で安定すると、SwiftランタイムはホストOSの一部となり、この制限はなくなります。

14
Yatheesha B L

Swiftアプリケーション しない /で動作する OS X 10.7 。私は、Mavericks上でうまく動作する単純なGUIアプリケーション(ビュー、ラベル、ボタン)を作成しました。基本SDKは10.9に設定され、展開ターゲットは10.7に設定されています。そのアプリケーションをDerivedDataフォルダから10.7仮想マシンにコピーしたところ、起動時にクラッシュしました。次のエラーを表示します。

Crashed Thread:  0

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000

Application Specific Information:
dyld: launch, loading dependent libraries

    Dyld Error Message:

  Library not loaded: /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
  Referenced from: /Users/USER/Desktop/Swift-Test.app/Contents/MacOS/../Frameworks/libswiftAppKit.dylib
  Reason: image not found

Binary Images:
       0x109c65000 -        0x109c6afff +private.Swift-Test (1.0 - 1) <649695D0-58FD-3D02-9176-2D40D4E711F2> /Users/USER/Desktop/Swift-Test.app/Contents/MacOS/Swift-Test
       0x109c83000 -        0x109dbffff +libswift_stdlib_core.dylib (1.0 - 600.0.34.4.5) <10AAC369-9404-321D-A892-49F65856D7AF> /Users/USER/Desktop/Swift-Test.app/Contents/Frameworks/libswift_stdlib_core.dylib
...

しかし、このVMには確かにCoreGraphicsライブラリがあるので、このメッセージはいらいらさせます。 CoreGraphicsを多用する他のアプリケーションは問題なく動作します。

14
Mike Lischke

私はiPod Touch(3rd gen)デバイスで素のSwiftベースのアプリを実行することをテストしました。 Swiftベースのアプリケーションのように見えます しない iOS 5.xでは動作しますが、 do はiOS 6.xで動作します。

IOS 5.0.1でテストアプリを起動しようとしたときにデバッグログに表示されるのは次のとおりです。

dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswift_stdlib_core.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftCoreGraphics.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftDarwin.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftDispatch.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftFoundation.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftObjectiveC.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftUIKit.dylib with errno=1
dyld: Symbol not found: _OBJC_CLASS_$_NSObject
  Referenced from: /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswift_stdlib_core.dylib
  Expected in: /usr/lib/libobjc.A.dylib
 in /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswift_stdlib_core.dylib

IOS 6.1.6では、これらのエラーメッセージを表示せずにアプリは正常に動作します。

12
David H

ここには古い答えがたくさんあるように思われるので、私はSwiftチームからの公式の回答を投稿したいと思いました。 SwiftはOS X MavericksとiOS 7との後方互換性があります

アップルの開発者Swiftブログ:Swift AnyとしてのObjective-CのID

2014年7月11日

互換性

WWDCでよく聞かれる質問の1つは、「Swiftの互換性ストーリーは何ですか?」です。これはすばらしい最初のトピックのようです。

App Compatibility iOS 8とOS X Yosemiteがリリースされた今週Swiftアプリを作成してApp Storeに送信すれば、そのアプリは将来的にもうまく機能すると確信できます。 実際、同じアプリを使ってOS X MavericksやiOS 7にターゲットを戻すことができます。 これは、Xcodeがアプリケーションのバンドル内に小さなSwiftランタイムライブラリを埋め込むために可能です。ライブラリが埋め込まれているので、あなたのアプリは過去、現在、そして将来のOSリリースで動作するSwiftの一貫したバージョンを使用します。

12
Oren

私はまた10.8で非常に単純なアプリを試しました(一つのボタン、ラベルにテキストを設定します)。 Greg Parker氏が述べたように、起動時にクラッシュしました。

Dyld Error Message:
  Symbol not found: __dispatch_source_type_memorypressure
  Referenced from: /Volumes/*/SwifTest.app/Contents/MacOS/../Frameworks/libswiftDispatch.dylib
  Expected in: /usr/lib/libSystem.B.dylib
in /Volumes/*/SwifTest.app/Contents/MacOS/../Frameworks/libswiftDispatch.dylib

(これは10.7のデプロイメントターゲットを使用していました)

11
Valdar Moridin

次のコードを試してください。

StoryBoardがなくても動作します。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    self.window!.backgroundColor = UIColor.whiteColor()

    // Create a nav/vc pair using the custom ViewController class

    let nav = UINavigationController()
    let vc = ViewController(nibName: "ViewController", bundle: nil)

    // Push the vc onto the nav
    nav.pushViewController(vc, animated: false)

    // Set the window’s root view controller
    self.window!.rootViewController = nav

    // Present the window
    self.window!.makeKeyAndVisible()
    return true
}
10
PREMKUMAR

Swift Frameworksになると。今日のように、Xcodeバージョン6.1.1(6A2008a)では、SwiftフレームワークがiOS 7.1をターゲットにしている場合、リンカーは警告を報告します

ld: warning: embedded dylibs/frameworks only run on iOS 8 or later.

アプリケーションをAppStoreに送信することはできません。この問題をチェックしてください: 動的ライブラリとフレームワークがiOS 7で合格するのを防ぐための手掛かり /

8
Marcin

はい。実際、AppleはSwiftアプリケーションがiOS 7およびOS X Mavericksと下位互換性があることを発表しました。さらにWWDCアプリはSwiftプログラミング言語で書かれています。

8
Bodi Osman

クイックアップデート、 2015年2月15日 から有効、iOS 8より前の SDKを使用して開発されたアプリをストアに送信することはできません 。そのため、Swiftで作成したアプリは OS X 10.9およびiOS 7.0 にもデプロイできることを多くの人が示唆しているので、このことを念頭に置いておくことをお勧めします。

7
13th Ghost

回答されたコードスニペット Leandrosによる投稿は少し古いようです。 Swift 5では修正してコンパイル可能にしました。

スイフト5

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)
    let controller = UIViewController()
    let view = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 568))
    view.backgroundColor = UIColor.red
    controller.view = view

    let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
    label.center = CGPoint(x: 160, y: 284)
    label.textAlignment = NSTextAlignment.center
    label.text = "I'am a test label"
    controller.view.addSubview(label)

    self.window!.rootViewController = controller
    self.window!.makeKeyAndVisible()
    return true
}
0