Получение (нулевой) ссылки в файле Xcode pbxproj
После обновления / увеличения версии и номера сборки в Xcode версии 9.1, я увидел следующее при выполнении git diff
diff --git a/star.xcodeproj/project.pbxproj b/star.xcodeproj/project.pbxproj
index c4601526..8fa3c762 100644
--- a/star.xcodeproj/project.pbxproj
+++ b/star.xcodeproj/project.pbxproj
@@ -767,7 +767,7 @@
- F4487BE11FB28C400079BAAD /* BuildFile in Sources */ = {isa = PBXBuildFile; };
+ F4487BE11FB28C400079BAAD /* (null) in Sources */ = {isa = PBXBuildFile; };
@@ -5625,7 +5625,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- F4487BE11FB28C400079BAAD /* BuildFile in Sources */,
+ F4487BE11FB28C400079BAAD /* (null) in Sources */,);
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
- <string>2.11.4</string>
+ <string>2.11.5</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleURLTypes</key>
@@ -39,7 +39,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
- <string>02110400</string>
+ <string>02110500</string>
<key>FacebookAppID</key>
<string>70858204300</string>
<key>FacebookBetaAppID</key>
Все, что я сделал, это поднял версию проекта. Но после выполнения git status и git diff я вижу пустые ссылки в файле.pbxproj. Кто-нибудь еще видел это? В качестве дополнительного примечания мы также используем Cocoapods в нашем проекте.
5 ответов
Удалить все вхождения нулевых строк
sed -i '' '/(null) in Sources /d' YourProject.xcodeproj/project.pbxpro
Я создал простой сценарий оболочки, чтобы удалить все пустые ссылки в файле проекта.
Сохранить как файл, дать разрешение на выполнение и вызвать его.
#!/bin/sh
sed -i '' '/(null) in Sources /d' ProjectName.xcodeproj/project.pbxproj
sed -i '' '/(null) in Resources /d' ProjectName.xcodeproj/project.pbxproj
sed -i '' '/(null) in Frameworks /d' ProjectName.xcodeproj/project.pbxproj
Я удалил все (нулевые) ссылки в файле проекта и все идентификаторы, которые упоминались вместе с ними. Потом попробовал собрать прогон и заархивировать приложение - все работало нормально. Похоже, Xcode не удалил их сам по какой-то причине.
В вашем случае попробуйте удалить F4487BE11FB28C400079BAAD с (null), а также все строки с этим F4487BE11FB28C400079BAAD. И сделать это с другими (нулевыми) ссылками.
sed -i '' '/^.*\/\* (null) in.*$/d' *.xcodeproj/project.pbxproj
Это решение с одной командой, которое удалит все нулевые ссылки во всех папках без необходимости редактировать команду. Это просто работает.
Вот альтернативный метод удаления линий с помощью Fastlane на основе ответа user3022613 .
desc 'Clean up null references in project.pbxproj file'
lane :remove_null_references_in_pbxproj_file do
path_to_pbxproj = '../YourApp.xcodeproj/project.pbxproj'
['Sources', 'Resources', 'Frameworks'].each { |section|
`sed -i '' '/(null) in #{section} /d' #{path_to_pbxproj}`
}
end
Это предполагает, что в вашем проекте установлена установка Fastlane по умолчанию, поэтому нам нужен относительный путь на один уровень вверх от
fastlane
папка для проекта.
В Fastlane вы можете просто вызвать эту полосу с помощью
remove_null_references_in_pbxproj_file
. Обратите внимание
sed
Команда заключена в обратные кавычки, а не в одинарные кавычки, поэтому интерполяция работает для сброса переменных в команду.