LoginSignup
1
0

More than 5 years have passed since last update.

ionicのplatforms以下のXcodeプロジェクトをgit submoduleで管理する

Last updated at Posted at 2018-08-26

やりたいこと

ionic cordova build iosplatforms 以下に出力されるXcodeのプロジェクトをgit管理したい

目的

Xcodeのプロジェクト自身に設定された情報(Capabilitiesなど)をバージョン管理したいため

環境

$ ionic info

cli packages: (/usr/local/lib/node_modules)

    @ionic/cli-utils  : 1.19.2
    ionic (Ionic CLI) : 3.20.0

global packages:

    cordova (Cordova CLI) : 8.0.0

local packages:

    @ionic/app-scripts : 3.1.11
    Cordova Platforms  : CordovaLib cordova ios 4.5.5 ios_test ios_test.xcodeproj ios_test.xcworkspace platform_www www
    Ionic Framework    : ionic-angular 3.9.2

System:

    ios-deploy : 1.9.0
    ios-sim    : 5.0.12
    Node       : v6.4.0
    npm        : 3.10.3
    OS         : macOS Sierra
    Xcode      : Xcode 9.2 Build version 9C40b

platforms 以下のXcodeプロジェクトは git submodule で独立したリポジトリとして管理する

ionic のルート直下にあるデフォルトの .gitignore では platforms 以下は無視されている
platforms 以下を対象にするため、# platforms/ としたいところだが、そのままだと platforms 以下の node_modulesplugins まで対象外になってしまう

ionic のルート直下にあるデフォルトの .gitignore を直接編集することも考えたが、以下の理由で止めた

  • platforms 以下にも node_modules ディレクトリがあるが、package.json がないため無視されてしまうとクローン後に再現できない
  • かといってルート直下の .gitignore に書かれている、「ルート以下の特定の名前を持つ全ディレクトリを無視する設定」を、platforms 以下だけ追跡するようにするのは難しそう1
  • ionic cordova platform add ios のときにしか生成されない、iOSでしか使われないモジュールが含まれているよう

思いもよらないファイルを無視してしまってエラーが出るのも面倒なので、node_modules 以下も含めて git 管理してしまうことにする

サブモジュール作成手順

  1. ionic プロジェクトのルートで git init
  2. platforms/ios で git init し、サブモジュール化
$ ionic start ionic_test blank
$ cd ionic_test/
$ ionic cordova platform add ios
$ ionic cordova run ios // エミュレータで動作確認

// ionic_test/platforms/ios で git init
$ cd platforms/ios
$ git init
// リモートリポジトリを設定してプッシュ(この例では、リモートリポジトリは https://bitbucket.org/ionic_test_ios.git)

$ cd ../
$ rm -rf ios

// ionic_test/platforms
$ git submodule add -f https://bitbucket.org/ionic_test_ios.git ios
// サブモジュールを設定すると、カレントディレクトリにクローンされる

あとはサブモジュールにコミットすると、もとの git の方にもそのコミットIDが自動的に反映されるので、もとの git の方でそのコミットIDをコミットする

実際に clone してビルドしてみる

$ git clone https://bitbucket.org/ionic_test.git
Cloning into 'ionic_test'...
remote: Counting objects: 101, done.
remote: Compressing objects: 100% (93/93), done.
remote: Total 101 (delta 7), reused 0 (delta 0)
Receiving objects: 100% (101/101), 1.32 MiB | 295.00 KiB/s, done.
Resolving deltas: 100% (7/7), done.
Checking connectivity... done.

$ cd ionic_test/
$ git submodule
-0b12e433d5fa9475180d9a6ef29f2db0ffa00648 platforms/ios

$ git submodule init
Submodule 'platforms/ios' (https://bitbucket.org/ionic_test_ios.git) registered for path 'platforms/ios'

$ git submodule update
Cloning into 'platforms/ios'...
remote: Counting objects: 849, done.
remote: Compressing objects: 100% (635/635), done.
remote: Total 849 (delta 147), reused 820 (delta 138)
Receiving objects: 100% (849/849), 2.97 MiB | 549.00 KiB/s, done.
Resolving deltas: 100% (147/147), done.
Checking connectivity... done.
Submodule path 'platforms/ios': checked out '0b12e433d5fa9475180d9a6ef29f2db0ffa00648'

$ ionic cordova build ios
...
** BUILD SUCCEEDED **

[ERROR] An error occurred while running cordova build ios (exit code 1).

// エラーの理由が分からないが、もう一度ビルドすれば正常にビルドされる
$ ionic cordova build ios

まとめ

.gitignore が上手く書けなかったのでサブモジュールを使いましたが、リポジトリが分かれてしまうのでできればひとつのリポジトリで管理したかったです
.gitignore での上手な書き方があれば教えてください!

参考


  1. 「ただし、一度記述した「ディレクトリの除外」を、跡から!で追跡しなおす設定は認められません。」(http://www-creators.com/archives/1662#gitignore-5

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0