Waakvlam blog

Waakvlam blog

「創りたい気持ち」に火をつけるWaakvlamの活動記録

iOS App開発でライブラリが古くて使えない経験ありませんか?

Team サイゼリヤ Advent Calendar 2018 | 21日目
こんにちは!
Appleが大好きななかりんです٩( ᐛ )و
最近は大学で研究に専念しています.

約1年ぶりの更新ですね...
もっと記事書けるように努力します.

【目次】

あらすじ

開発中のプロジェクトのSwiftのバージョンが使いたいライブラリよりも新しく,
ライブラリを導入できないときの対処法を3つ紹介します.

方法1:力試し

ライブラリのコードを参考にしながら,自前で実装する

ライブラリの中身を見ると意外と簡単に実装できてしまうことがあります!
実装力の向上にも繋がるのでおすすめですね!

しかし...

実装が大変だからライブラリを導入することが多いですよね.

そんな時は...

方法2:のんびり待つ

githubの該当リポジトリissueを書く

issueを書くなどして開発者に直接連絡したら,開発者が修正をしてくれるでしょう.

f:id:Waakvlam:20181220235836p:plain

でもでも...

修正を待つ時間がない!
そもそも,数年更新されていない!

そんな方の最終手段はこちら!!

方法3:修正して導入

ライブラリをインストールして修正してからbuildしよう!

Swiftをバージョンアップするだけで治るエラーならサクッと修正してしまいましょう!
幸運なことに,XcodeにはSwift 3からSwift 4にconvertする機能があります.
こちらを使って少し手直しするだけで簡単にエラーを解消できます.

もし修正をするのであればついでに,ライブラリのリポジトリへプルリク送りましょう.
開発者も利用者もお互いにwin-winになれます.


それでは方法3について具体的な手順を紹介します!

今回は以下のライブラリで実演します.
(約1年前インターン先で使いたかったけど使えなかったやつ...)
github.com


1. 該当リポジトリをforkしてクローン

git clone git@github.com:"自分のgithub ID"/TKSwarmAlert.git


2. サンプルのプロジェクトを開く

どのライブラリのリポジトリにもサンプルのプロジェクトがあるはずです.
(きっとあるはず!なかったらごめんなさい…)


3. Warningをクリックして詳細を確認

黄色い三角の注意マークみたいなやつをクリック.

f:id:Waakvlam:20181221003800p:plain

すると左側のNavigator Areaで詳細を見れます.

f:id:Waakvlam:20181221004518p:plain


4. Swiftのバージョンを更新しよう

Conversion to Swift 4.2 is availableをクリックすると以下のものが出てきます.

f:id:Waakvlam:20181221004854p:plain

Next > Minimize Inference (recommended)を選択してNext

これで自動でSwift 4.2へ移行開始されます!

以下のように変更前と変更後の差分が表示されます.
気になる人はさらっと目を通しておきましょう.

f:id:Waakvlam:20181221005257p:plain

OK > Save


5. 残りのWarningを1つずつ解消

ほとんどのWarningsはクリックする誘導されて解消できますが,
クリックするだけでは表示されないものとかをピックアップします.

Swift 3 mode has been deprecated and will be removed in a later version of Xcode.
Please migrate "TKSwarmAlert" to Swift 4.2 using "Convert > To Current Swift Syntax…" in the Edit menu.
(in target 'TKSwarmAlert')

プロジェクトのバージョンをSwift 4.2に変更してBuildすると解消

f:id:Waakvlam:20181221010654p:plain

The use of Swift 3 @objc inference in Swift 4 mode is deprecated.
Please address deprecated @objc inference warnings, test your code with “Use of deprecated Swift 3 @objc inference” logging enabled,
and then disable inference by changing the "Swift 3 @objc Inference" build setting to "Default"
for the "TKSwarmAlert" target. (in target 'TKSwarmAlert')

TargetのBuild Settingsの中に、Swift3 @objc Infenceという項目があるので、
これをDefaultに変更してBuildすると解消


6. Waring解消して綺麗にBuildできたらpushしてプルリクを送りましょう

開発者が修正する手間が省けるし,他のユーザのためにもなるので,
ぜひプルリク送りましょう!
(githubの草生やしていこう!!)
f:id:Waakvlam:20181221011906p:plain


7. CarthageでTKSwarmAlertを利用したいプロジェクトへインストール

Carthageの使い方は こちら

インストールしてからパッケージ化中にエラー吐かれて停止するはずです.

インストールしたライブラリのフォルダ(Carthage/Checkouts/TKSwarmAlert)と,
修正したライブラリのフォルダを開きます.

TKSwarmAlertというソースファイルが入ったフォルダがあるので,
修正した方のフォルダをコピーして
インストールした方の(Carthage/Checkouts/TKSwarmAlert/TKSwarmAlert)
に貼り付けて置き換えます.

Carthage/Checkouts/TKSwarmAlert にあるサンプルプロジェクトを開いて
Warningを解消して,さらにTargetsの
Build Settings > Swift Compiler - Language
でSwiftのバージョンを開発中のプロジェクトに合わせます.

ここでサンプルプロジェクトのBuildを通すことができたらOK!

そしたら,terminalで開発中のプロジェクとのrootにもどってきて

carthage build TKSwarmAlert

と打ち込みます.(たぶん通ります)


8. プロジェクトに紐づけてimport

生成されたframeworkをプロジェクトに紐づけて.
使いたいところで import して Build すると...


Buildできた!!
🎉🥳🎉


おわりに

ライブラリ導入できなくてもすぐ諦めない💪
※方法は上記の他にもあると思います



↓実際に導入して実行してみた結果
f:id:Waakvlam:20181221035831g:plain:w200
一応クソコードは こちら


P.S.
記事書くの久しぶりでもともと書くの下手なのに
長々とお付き合いしていただきありがとうございました.
ほんの一部の人にでもこの記事が役立ってくれると嬉しいです.

今後も宜しくお願いします٩( ᐛ )و
twitter.com
github.com