XCode: как отделить конфиденциальную информацию от исходного кода?

#ios #xcode

#iOS #xcode

Вопрос:

Я новичок в разработке iOS и пытаюсь создать практическое приложение с использованием API Facebook Graph.

Когда я интегрируюсь с API Facebook, мне требуется сохранить идентификатор приложения в файле Info.plist проекта.(https://developers.facebook.com/docs/ios/getting-started#configure )

Хотя идентификатор приложения Facebook не является сверхсекретным, я хочу открыть исходный код своего репозитория на GitHub, и меня беспокоила необходимость загружать идентификатор приложения вместе с исходным кодом.

Я мог бы добавить такой файл .gitignore или убедиться, что удаляю конфиденциальную информацию всякий раз, когда загружаю ее на GitHub, но они, по-видимому, подвержены ошибкам и совсем не элегантны.

Исходя из фона Java, я использовал для хранения паролей базы данных и другой секретной информации в качестве системных переменных среды или сохранял их в файле настроек инструмента сборки, таком как Maven settings.xml , чтобы они поддерживались отдельно от исходного кода.

Существуют ли известные рекомендации по отделению конфиденциальной информации от хранилища при разработке iOS?

Спасибо.

Комментарии:

1. Вы смотрели на NSUserDefaults?

Ответ №1:

Как насчет этого сценария:

  1. Создайте файл MyId.txt на вашем Mac (домашний каталог или каталог, к которому можно предоставить общий доступ, например ~/FacebookConfidential/) для хранения идентификатора FacebookAppId.

  2. Добавьте сценарий запуска на этапах сборки проекта Xcode, прочитайте MyId.txt содержимое файла и установите для него значение info plist с помощью plistbuddy. Цель состоит в том, чтобы обновить список свойств информации, чтобы Facebook SDK мог получать идентификатор во время выполнения.

     INFO_PLIST="info.plist"
    FACEBOOK_ID=$(<~/FacebookConfidential/MyId.txt)
    if [ -n ${FACEBOOK_ID} ]; then
        /usr/libexec/PlistBuddy -c "Set :FacebookAppID ${FACEBOOK_ID}" ${INFO_PLIST}
    fi
      
  3. Используйте git pre-commit hook, чтобы очистить FacebookAppId в info plist или изменить его на значение заглушки, чтобы убедиться, что FacebookAppId не передан в репозиторий. Вы также можете захотеть вызвать plistbuddy в перехватчике.

  4. Сотруднику необходимо выполнить шаг 1 и создать ~/FacebookConfidential/MyId.txt в его системе.

Таким образом, идентификатор FacebookAppId сохраняется в вашей системе, единственное, чем можно поделиться, — это путь. Надеюсь, это прольет свет.