CocoaPods -> Carthage移行中に"dyld`dyld_fatal_error"でハマった話
Carthageで依存を設定したライブラリ読み込みでハマったので備忘のため記載。
ビルドが成功しても実行中に以下のようなエラーが出てしまいました。
dyld`dyld_fatal_error dyld: lazy symbol binding failed: Symbol not found: dyld: Symbol not found:
原因
今までObjectiveCで開発してきたアプリをSwiftで書き直す際、
ライブラリ依存方法もCocoaPodsからCarthageに変えていたのですが、
ここにミスがありました。
cartfileに移行したものをpodfileから消し忘れており、
同じライブラリの2つの実体を生成してしまっていました。
(CarthageとCocoaPodsの両方を利用しています。)
そうなると何やらエラーが出るんですね。
対策・結論
CartfileとPodfileに被りがないようにする。
プロジェクトファイルばかり確認して2日潰しましたよ、トホホ・・。
iOS frameworkをtvOSにも対応させる
Carthageで使う自作iOS frameworkをtvOSに対応させた。
以下の方々のブログを参考に作業を進めてやったことだけをまとめる
iOS用のCarthageフレームワークをwatchOSやtvOSに対応させる – Morizotter Blog
iOSでしかCarthageで導入できないライブラリをOSX,tvOS,watchOSにも対応してもらいたい時にすること - Qiita
手順
- File > New Target > "XXXKit tvOS"で作成
- tvOSターゲットのBuild settingsでProductNameを"XXXKit"に変更
- 同じくBuild settingsでInfo.plistファイルのパスを従来の"XXXKit"に指定
- XXXKit.hをFile InspectorのTargetMembershipからpublicで追加
- XXXKitで使うソースコードをBuild PhasesのCompile Sourcesに全部追加
- "XXXKit tvOS"のディレクトリを削除。手順5で使うソースを指定したので不要。
- Product > Edit Scheme > Manage Schems > XXXKit tvOS でスキームをShareにする
備考
- 他ライブラリに依存している場合、Carthage/Build/iOSではなくCarthage/Build/tvOSから依存ライブラリを追加する必要がある・・と思う。
Swiftで内部クラスのextensionを定義する
UIScrollViewを持ってるViewControllerのタッチイベントを取りたくなった。
という訳で、ViewControllerクラスのextensionでUIScrollViewのサブクラスを定義して、サブクラスのextensionでオーバーライドしてみたら出来た。
と、ここまで書いてきたけど、サブクラスの定義内でoverrideすれば良いことに気付いてしまった・・
私は一体何をしていたのか(;´д`)トホホ…
内部クラスのextensionがドット(.)で作れるって事を学べたってことで・・。
NSLocalizedStringの引数が増えてた
NSLocalizedStringを使おうと思ったらメソッドが長くて驚いた。
定義を見るとdefault引数だったので、
省略してしまいます。
パラメータは何?
超昔からあった様ですが知りませんでした。
key: いつものキー
tableName: .stringsファイルの名前
bundle: .stringsファイルを含むバンドル
value: tableからkeyにマッチする値が取れなかった場合の値
comment: コメント
しかし、デフォルト引数の補完わかりにくいな:(
XibとStoryboardのコンパイルでエラーが出てハマった話
以前にXibとStoryboardのビルドエラーでハマった時の話です。
The following build commands failed: CompileXIB Hoge/Fuga.xib
いやー、自分の環境ではビルド成功して、Jenkinsさんだけでエラーだったんでハマりましたわ。
原因
YosemiteとかMavericksの環境でXib,SBにてViewとか追加しちゃうと、
appearanceType="aqua"
って属性が付いちゃって、環境が異なるビルドでエラーになっていたとのことでした。
対策
軒並み削除しても問題なく動くようなので、消してしまいます。
find . -name "*.xib" -o -name "*.storyboard" | xargs sed -i "" 's/ appearanceType=\"aqua\" / /g'%
もっと良い方法ありそうだけど、とりあえずはコレで行きます。
StoryboardとXibのオブジェクトには名前付け
viewとかconstraintで名前をつけた方が良いっすよね。 英語の方がカッコイイけど、日本人同士の開発では日本語の名前で良いんじゃないかと思う。
先日の記事で作った適当なView階層のそれぞれに名前付け。
ある程度、目星が付きますね!