Лучший способ добавить любое количество файлов в мой проект xcode (и выполнить некоторую обработку) - написать небольшой скрипт php. Сценарий может просто скопировать файлы в пакет. Сложная часть - интеграция с xcode. Мне потребовалось некоторое время, чтобы найти чистый путь. (С помощью этого метода вы можете использовать язык сценариев, который вам нравится).
Сначала используйте «Add Run Script» вместо «Add Copy File»
Параметр оболочки:
/bin/sh
Параметр команды:
${SRCROOT}/your_script.php -s ${SRCROOT} -o ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}
exit $?
(скриншот в xcode)
$ {SRCROOT} - это каталог вашего проекта.
$ {CONFIGURATION (...) - это каталог пакета. Именно то, что вам нужно:)
Таким образом, ваш код возврата скрипта может остановить сборку xcode (используйте die (0) для успеха и die (1) для сбоев), и вывод скрипта будет виден в журнале сборки xcode.
Ваш скрипт будет выглядеть так: (не забудьте на нем chmod + x)
#!/usr/bin/php
<?php
error_reporting(E_ALL);
$options = getopt("s:o:");
$src_dir = $options["s"]."/";
$output_dir = $options["o"]."/";
// process_files (...)
die(0);
?>
БОНУС : здесь моя функция 'add_file'.
- Обратите внимание на специальную обработку PNG (используйте сжатие png от Apple)
- Обратите внимание на использование filemtime / touch для предотвращения копирования файлов каждый раз.
* +1034 * л
define("COPY_PNG", "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/copypng -compress");
function add_file_to_bundle($output_dir, $filepath) {
// split path
$path_info = pathinfo($filepath);
$output_filepath = $output_dir.$path_info['basename'];
// get file's dates of input and output
$input_date = filemtime($filepath);
$output_date = @filemtime($output_filepath);
if ($input_date === FALSE) { echo "can't get input file's modification date"; die(1); }
// skip unchanged files
if ($output_date === $input_date) {
//message("skip ".$path_info['basename']);
return 0;
}
// special copy for png with apple's png compression tool
if (strcasecmp($path_info['extension'], "png") == 0) {
//message($path_info['basename']." is a png");
passthru(COPY_PNG." ".escapeshellarg($filepath)." ".escapeshellarg($output_filepath), $return_var);
if ($return_var != 0) die($return_var);
}
// classic copy
else {
//message("copy ".$path_info['basename']);
passthru("cp ".escapeshellarg($filepath)." ".escapeshellarg($output_filepath), $return_var);
if ($return_var != 0) die($return_var);
}
// important: set output file date with input file date
touch($output_filepath, $input_date, $input_date);
return 1;
}