FirebaseをCocoaPodsでEmbeddedFrameworkなmain target以外にも入れたい

## 背景

以前、embedded frameworkを使ってFirebaseを[main target以外に入れることが][LI-1]できたのだが

環境の更新でエラーとなってしまう事象が発生したので調査と対応

- Xcode(`10.3` -> `11.1`)
- Cocoapods(`1.5.3` -> `1.8.4`)
- Firebase(`4.13.0` -> `6.12.0`)

## 事象

- 環境情報

```
Xcode: 10.3 (11A1027)
CocoaPods: 1.5.3
```

```Ruby:Podfile

# Uncomment the next line to define a global platform for your project
platform :ios, '11.0'

# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!

target 'Domain' do

  target 'Infra' do
    inherit! :search_paths

    # Pods for Infra
    pod 'Alamofire'
    pod 'Firebase/Core', '~> 4.13.0'
    pod 'Firebase/Firestore'

    target 'EmbeddedFirebase' do
      inherit! :search_paths

      # Pods for EmbeddedFirebase
      pod 'Fabric'
      pod 'Crashlytics'
    
    end
  end
end

```

[こんな感じの構成][GH-tag-1st]、Podfile(抜粋)です。Infra層でFirebaseを使いたかった

### XcodeをUpdate

```
Xcode: 11.1 (11A1027)
```

-> ビルド：OK!　実行：OK！

### [CocoaPodsをUpdate][GH-pr1-3bff1ac]

```
❯ bundle update

❯ bundle exec pod --version
1.8.4
```

-> ビルド：OK!　実行：NG！

```
dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire
  Referenced from: ~/Library/Developer/CoreSimulator/Devices/C03D2C2B-D4C4-4251-A3DB-8D345B7C4A5A/data/Containers/Bundle/Application/FEA53091-4E07-4E1D-A16C-82EB3C0E1618/EmbeddedFirebase.app/EmbeddedFirebase
  Reason: image not found
```

Build Phasesから`[CP] Embed Pods Frameworks`が消えてる、、

### [とりあえずpod updateして見よう][GH-pr1-a2db1bd]

```
❯ bundle exec pod update
```

-> 変わらず

### [Firebaseもupdateしてみる][GH-pr1-4472e5d]

```Diff:Podfile

@@ -14,7 +14,7 @@ target 'Domain' do

     # Pods for Infra
     pod 'Alamofire'
-    pod 'Firebase/Core', '~> 4.13.0'
+    pod 'Firebase/Core'
     pod 'Firebase/Firestore'

     target 'EmbeddedFirebase' do
```

-> 変わらず

> [use_modular_headers! にすることで上記解決することができました][LI-2]

### [Podfileを修正][GH-pr1-3d782e9]

```Diff:Podfile

@@ -2,7 +2,7 @@
 platform :ios, '11.0'

 # Comment the next line if you don't want to use dynamic frameworks
-use_frameworks!
+#use_frameworks!

 target 'Domain' do

```

-> ビルド：OK!　実行：OK！

なるほど解決、一件落着。と行きたいところだが結局の原因が不明？

## 解説： `use_frameworks!` とはなんなのか

[Why do we use use_frameworks in CocoaPods?][LI-3]
> use_frameworks tells CocoaPods that you want to use Frameworks instead of Static Libraries. Since Swift does not support Static Libraries you have to use frameworks.

つまり、'!use_frameworks'をつけると、CocoaPodsにstatic librariesの代わりにdynamic frameworkとして使いますと設定します

なぜ？
-> Xcode9.0、CocoaPods1.5.0未満の環境ではSwiftがStatic Librariesをサポートしていなかったらですね

現在の環境でしたらiOS10以降になっているはずなのでさっさと修正しましょう。

dylibsが増えると起動時間が長くなる問題もある

```
# before
Total pre-main time: 1.0 seconds (100.0%)
         dylib loading time: 668.83 milliseconds (63.5%)
        rebase/binding time:  14.29 milliseconds (1.3%)
            ObjC setup time:  30.45 milliseconds (2.8%)
           initializer time: 339.00 milliseconds (32.2%)
           slowest intializers :
             libSystem.B.dylib :   6.16 milliseconds (0.5%)
    libMainThreadChecker.dylib :  33.04 milliseconds (3.1%)
                         Infra : 270.55 milliseconds (25.7%)

# after
Total pre-main time: 598.13 milliseconds (100.0%)
         dylib loading time: 226.94 milliseconds (37.9%)
        rebase/binding time:   1.49 milliseconds (0.2%)
            ObjC setup time:  18.88 milliseconds (3.1%)
           initializer time: 350.80 milliseconds (58.6%)
           slowest intializers :
             libSystem.B.dylib :   5.98 milliseconds (1.0%)
    libMainThreadChecker.dylib :  34.12 milliseconds (5.7%)
                         Infra : 593.70 milliseconds (99.2%)

```

この数だと誤差かもなぁ

## まとめ

動いているからといって放置せず、ツール・ライブラリはこまめにメンテナンスしろ!

でも、[aws-sdk-ios][AWS-issues-1677]だけは勘弁な

## 参考

- [CocoaPodsでFirebaseをmain target以外に入れることができない問題（解決済）][LI-1]
- [Why do we use use_frameworks in CocoaPods?][LI-3]
- [iOSアプリ起動時のダイナミックリンクライブラリの読み込み時間を調べる][LI-4]
- [Can't import as Static library with Cocoapods][AWS-issues-1677]

[LI-1]:https://qiita.com/takasek/items/39c28042c4ecef4685ee
[LI-2]:https://qiita.com/takasek/items/39c28042c4ecef4685ee#comment-03ab2daef2f5e5217fa6
[LI-3]:https://stackoverflow.com/questions/41210249/why-do-we-use-use-frameworks-in-cocoapods/41210375
[LI-4]:https://qiita.com/rizumita/items/4ce620e73216dfdb92d8
[GH-tag-1st]:https://github.com/yumemi-nkomiya/EmbeddedFirebase/tree/1st
[GH-pr1]:https://github.com/yumemi-nkomiya/EmbeddedFirebase/pull/1
[GH-pr1-3bff1ac]:https://github.com/yumemi-nkomiya/EmbeddedFirebase/pull/1/commits/3bff1ac81745f76d67bcaf14819f9b91f1ecbbc9
[GH-pr1-a2db1bd]:https://github.com/yumemi-nkomiya/EmbeddedFirebase/pull/1/commits/a2db1bddd92587e88ac01cea12831bbcdd3f0dd9
[GH-pr1-6e53089]:https://github.com/yumemi-nkomiya/EmbeddedFirebase/pull/1/commits/6e530899236c23148c4f3e36588ad7b5a572e3f8
[GH-pr1-4472e5d]:https://github.com/yumemi-nkomiya/EmbeddedFirebase/pull/1/commits/4472e5d85ffe543d5de0700655157c833f2a4bda
[GH-pr1-3d782e9]:https://github.com/yumemi-nkomiya/EmbeddedFirebase/pull/1/commits/3d782e96bcc957481b54c25ab6df9c2e17bae6b3
[AWS-issues-1677]:https://github.com/aws-amplify/aws-sdk-ios/issues/1677