目的
- synx を利用し、コマンドを実行することで自動的にファイルを整理する
- Xcode と同じ OpenStateFormat の
pbxprojファイルを出力する -
pbxproj内のファイルの順序は変更しない
課題
synx v0.1.1
-
NG:
pbxproj内のファイルの順序がアルファベット順になる- ファイルシステムと同じ順序になり、自由に順序を変更できるという利点がなくなる
- アルファベット順にしないオプションは提供されていない
- https://github.com/venmo/synx/issues/26
- OK:
pbxprojファイルは OpenStateFormat で出力される
synx v0.0.61
-
NG:
pbxprojファイルがXMLFormatで出力される- Xcode で
pbxprojファイルを更新すると OpenStateFormat に書き換わる - コマンド実行後に手動で修正する必要がある
- うっかり修正を忘れてコミットすると悲しいことになる
- Xcode で
- OK:
pbxproj内のファイルの順序はそのまま保持される
差分イメージ
diff --git SampleProject.xcodeproj/project.pbxproj SampleProject.xcodeproj/project.pbxproj
index 71cf5d5..5f29e86 100644
--- SampleProject.xcodeproj/project.pbxproj
+++ SampleProject.xcodeproj/project.pbxproj
@@ -1,402 +1,751 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 46;
- objects = {
...
- rootObject = 6DD1BA9E1BD54C9A00159F69 /* Project object */;
-}
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>archiveVersion</key>
+ <string>1</string>
+ <key>classes</key>
+ <dict/>
+ <key>objectVersion</key>
+ <string>46</string>
+ <key>objects</key>
...
+ <key>rootObject</key>
+ <string>6DD1BA9E1BD54C9A00159F69</string>
+</dict>
+</plist>
対策
v0.1.1 のソート処理部分を上書きする
- 最新版である v0.1.1 を採用する
- ソート部分だけ上書きする
スクリプトを書く
sync.rb
# sync.rb
require 'synx'
#
# override
#
module Xcodeproj
class Project
module Object
class PBXGroup
def sort_by_name
return
end
end
end
end
end
#
# execute
#
Synx::Project.open('./SampleProject.xcodeproj').sync
実行する
$ ruby ./sync.rb