OCとSwiftの混成プロジェクトはSwift 4に移行する.2小記
5514 ワード
前言
そのため、私はずっと
しかし、低バージョンの
メールの内容が示すように、
そこで、私は移転の道を始めるしかなかった.
移行の開始
現在の
AVAudioSessionの変更
しかし、1つの例外がある:
低バージョンと互換性を持つために、OCを使用して
そしてあなたのプロジェクトの
そして前のように呼び出すことができます.
While deserializing SIL vtable for 'Class' in module 'module' error: Abort trap: 6
このような問題は2つに分けられ、1つは
第1種
1つ目は
第2種
2つ目は、一般的に
他の奇妙な間違い
移転が完了した後、プロジェクトが走り出すと、奇妙な問題がたくさん発生します.たとえば、メソッドAが呼び出されると
このような誤りは、一般的に以上の2つの問題と本質的であり、自分でよく区別し、それから相応の更新/変更をすればよい.
以上の問題を除く、プロジェクトコンパイル時には
最后に、将来Swift 5に适する时、こんなに多くの穴がないことを望みます...
Xcode10
の正式版が発表されてから、カニを先に食べた友达はDark Mode
の驚きを称賛し、同時にAPPStroe
にパッケージアップロードした後、オンラインのiOS9.3
設備の大面積crashの記録を監視し、最後にXcode10
の問題であることが確認されたと報告した.そのため、私はずっと
Xcode9.4.1
とSwift4
を使って混編プロジェクトの開発を行っています.しかし、低バージョンの
Xcode
パッケージを使用してAPPStore
をアップロードするたびに、アップルの公式警告メールが届きます.メールの内容が示すように、
2019
年の3
月までに低バージョンのXcode
を使用してパッケージアップロード操作を行うことはできない.そこで、私は移転の道を始めるしかなかった.
移行の開始
現在の
Xcode10.1(10B61)
で開く後、Build Setting
でSwift Language Version
を検索し、対応する値をSwift 4.2
に変更してコンパイルを開始すると、非常に多くのError
、多くはABI
の変動が発生し、ヒントに従って修正すればよい.AVAudioSessionの変更
しかし、1つの例外がある:
Swift
によってAVAudioSession setCategory
という方法が使用する場合、Swift
において方法が使用できないことが知られる.ジャンプしてAPI
が変わったことに気づきました/* set session category and mode with options */
@available(iOS 10.0, *)
open func setCategory(_ category: AVAudioSession.Category, mode: AVAudioSession.Mode, options: AVAudioSession.CategoryOptions = []) throws
低バージョンと互換性を持つために、OCを使用して
AVAudioSession
の分類をブリッジするのが適切です.// AVAudioSession+Swift.h:
@import AVFoundation;
NS_ASSUME_NONNULL_BEGIN
@interface AVAudioSession (Swift)
- (BOOL)swift_setCategory:(AVAudioSessionCategory)category error:(NSError **)outError NS_SWIFT_NAME(setCategory(_:));
- (BOOL)swift_setCategory:(AVAudioSessionCategory)category withOptions:(AVAudioSessionCategoryOptions)options error:(NSError **)outError NS_SWIFT_NAME(setCategory(_:options:));
@end
NS_ASSUME_NONNULL_END
// AVAudioSession+Swift.m:
#import "AVAudioSession+Swift.h"
@implementation AVAudioSession (Swift)
- (BOOL)swift_setCategory:(AVAudioSessionCategory)category error:(NSError **)outError {
return [self setCategory:category error:outError];
}
- (BOOL)swift_setCategory:(AVAudioSessionCategory)category withOptions:(AVAudioSessionCategoryOptions)options error:(NSError **)outError {
return [self setCategory:category withOptions:options error:outError];
}
@end
そしてあなたのプロジェクトの
-Bridging-Header.h
の中でimport
という分類です.#import "AVAudioSession+Swift.h"
そして前のように呼び出すことができます.
try AVAudioSession.sharedInstance().setCategory(.playback)
While deserializing SIL vtable for 'Class' in module 'module' error: Abort trap: 6
このような問題は2つに分けられ、1つは
module
が他のtarget
、例えばPods
の中で、もう1つはmodule
が自分で作成したtarget
である.第1種
1つ目は
Error
が指す3つのライブラリを最新バージョンに更新するだけでいいです.Xcode10
は半年近く発表されています.これらの問題は前にもありました.半年の間、基本的に流行している3つのライブラリはSwift4.2
に適しています.第2種
2つ目は、一般的に
Error
のうちClass
が指すクラスであり、自分はSwift
クラスであるが、Objective-C
が宣言したクラスから継承する.私は自分でいくつかの微調整を試した後、何の役にも立たないことに気づいたので、間違いのクラスをObjective-C
で書き直し、ブリッジファイルに導入するしかなかった.幸い、間違いを報告するのは多くなく、あまり力を入れなかった.他の奇妙な間違い
移転が完了した後、プロジェクトが走り出すと、奇妙な問題がたくさん発生します.たとえば、メソッドAが呼び出されると
unrecognize selector *
と、(setupNavibar関数では初期化コンストラクタを呼び出す必要はありません)という名前の
が報告されます.このような誤りは、一般的に以上の2つの問題と本質的であり、自分でよく区別し、それから相応の更新/変更をすればよい.
以上の問題を除く、プロジェクトコンパイル時には
Pods
で引用された第三者のクラスにABIが修正する必要があるError
を報告するが、この場合は隊形のTarget
を見つけるだけで、そのBuild Settings
でSwift Language Version
をその対応バージョンに修正すればよい.最后に、将来Swift 5に适する时、こんなに多くの穴がないことを望みます...