Получение (нулевой) ссылки в файле 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Команда заключена в обратные кавычки, а не в одинарные кавычки, поэтому интерполяция работает для сброса переменных в команду.

Другие вопросы по тегам