【Swift】LINEログイン機能の実装方法

#はじめに

個人アプリ作成時にLINEログイン機能を実装したので、
備忘録がてらコマンドの共有をさせていただきます。

GitHubにコードを載せていますのでぜひご覧ください。
-> https://github.com/onishi-app/LINELogin

環境
・Apple Swift version 5.3
・XCode version 12.3
・LINE  Developers 5.2

#完成形

![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/2695b636-bdc9-2899-2386-0658363aa313.gif)

#実装方法

実装方法について１から説明していきます。

下記サイトを参考に機能を実装してので皆さんも参考にしていただければと思います。
-> [参考サイト](https://developers.line.biz/ja/docs/ios-sdk/swift/setting-up-project/#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)

基本的にこちらを参照すれば作成出来ると思いますが
私が作成した時の流れも下に記載しておきます。
(Developerにチャネルを追加する流れやエラーの対処など)
##LINE Developers
まずはじめに、[LINE Developer](https://developers.line.biz/ja/)にアクセスします。
右上のログインから自分のLINEアカウントにログインします。
![スクリーンショット 2021-01-11 8.53.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/a7cf4811-04ed-be98-0137-18aafe885613.png)

下にスクロールし、新規プロバイダーを作成します。
![スクリーンショット 2021-01-11 8.53.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/93e07f34-65e9-dd0c-2aac-247a8531cf36.png)

適当な名前でいいのでプロバイダーを作成します。
![スクリーンショット 2021-01-11 8.54.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/7e6259ee-b26f-9032-9189-7238b07a3aca.png)

するとプロバイダーが作成されるので、
作成されたプロバイダーからLINEログインチェネルを作成します。
![スクリーンショット 2021-01-11 8.54.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/847c1923-a057-35a5-d7b1-dfd0c3d0f235.png)

必要な項目を入力しチャネルを作成します。
作成するとチャネルIDが定義されます。
![スクリーンショット 2021-01-11 8.56.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/fc921ac9-71c2-bc9f-7b54-b4ab4d0550a0.png)

チャネルを作成後にアプリのbundle IDを入力する必要があるので、
LINEログイン機能を実装するアプリを作成します。

bundle IDは下画像のBundle Identifierがbundle IDが記載されています。
![スクリーンショット 2021-01-11 9.05.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/c7676b9b-3a15-34f4-5648-510e058f527d.png)

チャネルのタブをLINEログイン切り替えると、iOSバンドルIDを記入する箇所があるので、
そこに先ほど作成したアプリのbundle IDを入力します。
![スクリーンショット 2021-01-11 9.06.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/68021558-d98e-0645-c70d-cae3cc95343a.png)

LINE Developerはいったんここまでです。

次にターミナルを開きます。
**※ CocoaPods と Homebrew をインストールしておく必要があるので
そちらのインストールを事前にお願いします。**

##CocoaPods

ディレクトリの移動を行います。

```
cd /**/**/**/アプリフォルダ
```
ターミナルの操作方法が分からない方は、
cdの後にFinderからアプリフォルダをドラッグ&ドロップすると自動で入力されます。

Podfileの作成を行います。

```
$ pod init 
```
Podfileに下記内容を追記します。
（Finderからの操作でもviコマンドからの操作でも構いません。）

```
pod 'LineSDKSwift', '~> 5.0'
```
podのインストールを行います。

```
pod install
```

##Carthage

Cartfileを作成し、編集します。
（Finderからの操作でもviコマンドからの操作でも構いません。
 今回はviからの操作を記述しておきます。）

```
$ vi Cartfile
```

「 i 」を押すと編集モードになりますので
下記コマンドを入力後「 esc 」 -> 「 :wq 」を押します。
（ **vi コマンド** 検索すると操作方法が出てくると思います。）

```
github "line/line-sdk-ios-swift" ~> 5.0
```
画面が戻ったらアップデートを行います。

```
$ carthage update line-sdk-ios-swift
```
この時、下記のエラーが出力される方は、[**コチラ**](https://qiita.com/Atsushi_/items/40b204d6ff576eef86b9)の記事を参考にしてください。

```
A shell task (/usr/bin/xcrun xcodebuild -workspace /Users/ryosuke/Desktop/project/LINELogin/Carthage/Checkouts/line-sdk-ios-swift/LineSDK.xcworkspace CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= CARTHAGE=YES -list) failed with exit code 72:
xcrun: error: unable to find utility "xcodebuild", not a developer tool or in PATH
```
エラー対処後再度アップデートをお願いします。

私の場合は少し進みましたが、さらにエラーが発生しました。
下記エラーが出力された方は[**コチラ**](https://github.com/Carthage/Carthage/blob/master/Documentation/Xcode12Workaround.md)の記事を参考にしてください！
記事の「How to make it work」から下の部分を行えば上手くいきます。

```
Build Failed
	Task failed with exit code 1:
	/usr/bin/xcrun lipo -create /Users/ryosuke/Library/Caches/org.carthage.CarthageKit/DerivedData/12.3_12C33/line-sdk-ios-swift/5.7.0/Build/Intermediates.noindex/ArchiveIntermediates/LineSDK/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/LineSDK.framework/LineSDK /Users/ryosuke/Library/Caches/org.carthage.CarthageKit/DerivedData/12.3_12C33/line-sdk-ios-swift/5.7.0/Build/Products/Release-iphonesimulator/LineSDK.framework/LineSDK -output /Users/ryosuke/Desktop/project/LINELogin/Carthage/Build/iOS/LineSDK.framework/LineSDK

This usually indicates that project itself failed to compile. Please check the xcodebuild log for more details: /var/folders/4s/408j5zx12f1b7my_mjvm6xw80000gn/T/carthage-xcodebuild.FJHOKm.log
```

上手くいくと下記のようなログが出力されます。

```
MacBook-Pro:LINELogin ユーザ名$ carthage.sh bootstrap --platform iOS --cache-builds
*** Checking out line-sdk-ios-swift at "5.7.0"
*** No cache found for line-sdk-ios-swift, building with all downstream dependencies
*** xcodebuild output can be found in /var/folders/4s/408j5zx12f1b7my_mjvm6xw80000gn/T/carthage-xcodebuild.YksYHO.log
*** Downloading line-sdk-ios-swift.framework binary at "5.7.0"
*** Building scheme "LineSDKObjCBinary" in LineSDK.xcworkspace
*** Building scheme "LineSDKObjC" in LineSDK.xcworkspace
*** Building scheme "LineSDK" in LineSDK.xcworkspace
MacBook-Pro:LINELogin ユーザ名$ 
```

ディレクトリ内を確認するといくつかのファイルが作成されていると思います。
CartfileやPodfileが作成されていると思います。

LINELoginは、今回私が作成したアプリの名前になります。

```
$ ls -al
total 48
drwxr-xr-x  14 *******  staff   448  1 11 09:45 .
drwxr-xr-x@  8 *******  staff   256  1 11 09:04 ..
-rw-r--r--@  1 *******  staff  6148  1 11 09:32 .DS_Store
drwxr-xr-x  12 *******  staff   384  1 11 09:11 .git
-rw-r--r--   1 *******  staff     0  1 11 09:19 5.0
-rw-r--r--   1 *******  staff    40  1 11 09:44 Cartfile
-rw-r--r--@  1 *******  staff    41  1 11 09:45 Cartfile.resolved
drwxr-xr-x   3 *******  staff    96  1 11 09:45 Carthage
drwxr-xr-x   8 *******  staff   256  1 11 09:04 LINELogin
drwxr-xr-x@  5 *******  staff   160  1 11 09:10 LINELogin.xcodeproj
drwxr-xr-x@  5 *******  staff   160  1 11 09:10 LINELogin.xcworkspace
-rw-r--r--@  1 *******  staff   265  1 11 09:09 Podfile
-rw-r--r--@  1 *******  staff   330  1 11 09:10 Podfile.lock
drwxr-xr-x   8 *******  staff   256  1 11 09:10 Pods
```

ターミナルを使うのはここまでになります！お疲れ様です。

##LineSDK.frameworkファイルのリンク

ここまで上手くいくと、下記の階層に**LineSDK.framework**が作成されます。
`プロジェクト > Carthage > Build > iOS > LineSDK.framework`

それを、XCode > プロジェクト名 > General > Frameworks ,Libraries, and ・・・に
ドラッグ＆ドロップします。
![スクリーンショット 2021-01-11 11.33.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/eece14d5-1fe5-a232-c62e-2d80e5f0cb1d.png)

先ほどGeneralを選択していましたが、
Build Phasesを選択し、`＋`から**New Run Script Phase**を選択します。
![スクリーンショット 2021-01-11 11.39.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/0a085c25-00f2-b054-6750-b797a1f4c56a.png)

作成されたされた Run Script に下記の３つを追加します。
・`/usr/local/bin/carthage copy-frameworks`
・`$(SRCROOT)/Carthage/Build/iOS/LineSDK.framework`
・`$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/LineSDK.framework`

追加する場所は下画像を参考にしてください。
![スクリーンショット 2021-01-11 11.49.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/f54740fc-176b-93a6-8a44-00670dd98161.png)

##Info.plist
アプリにInfo.plistファイルが作られているはずなので、
controlキーを押しながらクリック > Open As > Source Code の順に選択します。
![スクリーンショット 2021-01-11 11.59.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/44806a51-6e53-3d11-4670-eb45c1db8918.png)

以下のスニペットを最後の</dict>タグの直前に挿入します。

```

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <!-- LINEからアプリに戻る際に利用するURLスキーマを追加 -->
            <string>line3rdp.$(PRODUCT_BUNDLE_IDENTIFIER)</string>
        </array>
    </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
    <!-- アプリからLINEを起動する際に利用するURLスキーマを追加 -->
    <string>lineauth2</string>
</array>
```

追加するとこんな感じです。
![スクリーンショット 2021-01-11 12.03.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/698b4554-fb01-bea2-4673-3d043766979a.png)

#iOSアプリにLINEログインを組み込む
インストールなどは行えたので、次に組み込み作業を行います。
参考にした記事は[**コチラ**](https://developers.line.biz/ja/docs/ios-sdk/swift/integrate-line-login/)です。

コードを書くだけなので参考サイトと同じ内容しか書くことができないため省略します。

#さいごに

なかなか大変な工程でしたがなんとかログインできました。

私が遭遇したエラーについてはある程度記述しましたが、
もしかしたらこの記事以外のエラーが発生するかもしれません。

エラーが発生したので諦めるのではなく、
エラーの文章で検索をかけて見てください！意外と出てきます！(笑)

以上、最後までご覧いただきありがとうございました。

#参考
・[インストール方法](https://developers.line.biz/ja/docs/ios-sdk/swift/setting-up-project/#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
・[インストール時エラー：ユーティリティ不明](https://qiita.com/Atsushi_/items/40b204d6ff576eef86b9)
・[インストール時エラー：アーキテクチャ重複回避策](https://github.com/Carthage/Carthage/blob/master/Documentation/Xcode12Workaround.md)
・[組み込み関連](https://developers.line.biz/ja/docs/ios-sdk/swift/integrate-line-login/)
・[コンパイル時エラー（Multiple commands produce）](https://qiita.com/SatoTakeshiX/items/047a313f564879e290ec)
コンパイル時エラー回避策実施後に出たエラーに対する対処
-> [ファイル「XXX.entitlements」を開ませんでした。](https://stackoverflow.com/questions/45395694/xcode-the-file-xxx-entitlements-couldn-t-be-opened-because-there-is-no-such)