まとーか鈴木

千の姿と千の技と千の風

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

手順

  1. File > New Target > "XXXKit tvOS"で作成
  2. tvOSターゲットのBuild settingsでProductNameを"XXXKit"に変更
  3. 同じくBuild settingsでInfo.plistファイルのパスを従来の"XXXKit"に指定
  4. XXXKit.hをFile InspectorのTargetMembershipからpublicで追加
  5. XXXKitで使うソースコードをBuild PhasesのCompile Sourcesに全部追加
  6. "XXXKit tvOS"のディレクトリを削除。手順5で使うソースを指定したので不要。
  7. 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を使おうと思ったらメソッドが長くて驚いた。

f:id:matouka_suzuki:20150220163034p:plain

定義を見るとdefault引数だったので、

f:id:matouka_suzuki:20150220163120p:plain

省略してしまいます。

f:id:matouka_suzuki:20150220163139p:plain

パラメータは何?

超昔からあった様ですが知りませんでした。

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"

って属性が付いちゃって、環境が異なるビルドでエラーになっていたとのことでした。

Xcode Crash with xib Files

対策

軒並み削除しても問題なく動くようなので、消してしまいます。

find . -name "*.xib" -o -name "*.storyboard" | xargs sed -i "" 's/ appearanceType=\"aqua\" / /g'%

もっと良い方法ありそうだけど、とりあえずはコレで行きます。

StoryboardとXibのオブジェクトには名前付け

viewとかconstraintで名前をつけた方が良いっすよね。 英語の方がカッコイイけど、日本人同士の開発では日本語の名前で良いんじゃないかと思う。

先日の記事で作った適当なView階層のそれぞれに名前付け。

f:id:matouka_suzuki:20140708001903p:plain

ある程度、目星が付きますね!