2014-11-18 3 views
0

Итак, у меня есть shell script, который генерирует два файла JSON. Сценарий запускается как «build Phase» в Xcode. Я ожидаю иметь программный доступ к этим сгенерированным файлам, но в коде они не могут быть найдены.Сценарий-файлы не могут быть найдены как ресурс проекта

Вот код, который генерирует файлы (я не указать пути - Script находится в корневом каталоге моего проекта):

echo $booksJSON >> defaultBooks.json 
echo $dateJSON >> defaultBooksDate.json` 

Я затем пытается получить доступ к этим файлам из такой код:

NSString *bookFilePath = [[NSBundle mainBundle] pathForResource:@"defaultBooks" ofType:@"json"]; 
NSString *dateFilePath = [[NSBundle mainBundle] pathForResource:@"defaultBooksDate" ofType:@"json"]; 

Очевидно, что я не могу видеть эти файлы, перечисленные в «Copy Bundle Resources» build phase шаг, потому что они генерируются во время компиляции, так что я полагаю, что файлы просто не копируются в .ipa файлов.

Есть ли какой-то шаг, который мне не хватает? Как я могу сообщить Xcode, чтобы включить файлы JSON в «copy bundle resources»?

Большое спасибо

ответ

0

Вы должны начать использовать environment variables provided by Xcode. Вы можете просто написать JSON непосредственно в пакет приложений вывода (если у вас нет особой причины генерировать их как «источник» и использовать Xcode для их копирования, то есть? Если это так, см. Ниже.).

Поэтому я поместил такие скрипты в подкаталог tools, и если этот скрипт был вызван generate_json.sh, то это абсолютный путь будет $(PROJECT_DIR)/tools/generate_json.sh.

В этом файле sctipt вы можете ссылаться на выходной каталог Xcode (где Xcode создает набор приложений) как $TARGET_BUILD_DIR.

Поэтому, что-то вроде этого:

#!/bin/sh 

cat <<EOF> "$TARGET_BUILD_DIR/MyApp.app/somefile.json" 

your json goes here. 

EOF 
  • Альтернативы этого подхода является генерировать .json файл в исходном дерево и добавить его в Xcode в качестве надлежащего исходного файла и организовать для него быть в обычном порядке копируется в приложение. Это обычно полезно только в том случае, если он генерируется из другого исходного файла (думаю, yacc и lex исходный файл). Если он изменяется для каждой сборки, используйте подход, который я здесь даю. Если он никогда не изменится, вы все равно не будете делать что-либо из этого материала, так как вы можете просто запустить скрипт вне Xcode.
+0

Это сработало! спасибо – RyanD

Смежные вопросы