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



Answers

スウィフトコードは、OS X 10.9およびiOS 7.0に導入できます。 これは通常、古いOSバージョンでの起動時にクラッシュします。

Question

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

たとえば、 OS X 10.8 (Mountain Lion)を実行しているマシンがあり、Swiftで作成したアプリケーションが実行されているのかどうか疑問に思っています。




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

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




アップデート - Xcode 6 Beta 4に準拠

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

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

Xcode 6リリースノートから

だから私の以前の答え(下に示されている)はそれ以上の開発には適用されません。 SwiftはiOS6以降ではご利用いただけません

スウィフトアプリケーションはiOS 6でも実行できます。多くの人がスウィフトは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つのファイルしか含まれていませViewController.swift

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

注:迅速なアプリのXcode 6ベータ4は、iOS 7またはOS X 10.9である必要があります(上記のアップデートを参照)。 iOS6以下では迅速に使用できなくなります




私は、iPod touch(3rd gen)デバイスでベアボーンのSwiftベースのアプリケーションを実行してみました。 Swiftベースのアプリケーション iOS 5.x では動作しませんが、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では、これらのエラーメッセージを表示せずに正常に動作します。




コードがそれを確認している間、Apple自身は、 WWDC 2014でSwiftがiOS 7とMavericksのテクニカル基調( プラットフォームの状態 、セッション102、34分00秒前後)で互換性があると言いました。




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




私も10.8で非常に単純なアプリを試しました(1つのボタンは、ラベルのテキストを設定します)。 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の展開ターゲットを使用していました)




Swiftアプリケーション OS X 10.7では動作 しないようだ。 私はちょうどマーベリックスでうまく動作するシンプルなGUIアプリケーション(ビュー、lable、ボタン)を作成しました。 基本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を大量に使用する他のアプリケーションはうまく動作します。




クイックアップデートは、2015年2月15日から、 iOS 8より前SDKを使用して開発されたアプリをストアに送信することはできません。 この点を念頭に置いて、Swiftで作成したアプリはOS X 10.9やiOS 7.0にもデプロイできることを多くの人が示唆しているので、この問題について心配しない方が良いでしょう。






Links