2013-03-21 8 views
0

Я пытаюсь изменить различные свойства для модульных тестов, такие, что введенные известные параметры не будут мешать различные настройки, когда на самом деле запуска приложения (в частности, брелок для ключей, но потенциально идентификатор Bundle тоже)Схема испытаний Xcode сценарий

(путь я себе делать это использует другой kSecAttrAccessGroup для модульных тестов на основе KeyChainService записи в PLIST.)

Я также намерен использовать данный скрипт с AppCode.

Проблема в том, что я не могу найти нигде, чтобы поместить скрипт (или любые переменные), который перезапишет обычный сценарий предварительного действия во время фазы сборки, которая возникает до любой фазы тестирования.

Моего Баш скрипт выглядит следующим образом:

plist="${PROJECT_DIR}/${INFOPLIST_FILE}" 
 if [[ "${plist}" == "/" ]]; then 
    # AppCode (no variables set) 
  plist=./myProject-Info.plist 
 fi 
 if [[ -z "$csKeyChain" ]]; then 
  csKeyChain=RUN 
 fi 
 if [[ -z "$bundleIdentifier" ]]; then 
  bundleIdentifier=com.mycompany.abc 
 fi 
  
 echo "Setting KeyChainService to $csKeyChain; CFBundleIdentifier to $bundleIdentifier" > ~/BUILD.txt 
 /usr/libexec/Plistbuddy -c "Set KeyChainService $csKeyChain" "${plist}" 
 /usr/libexec/Plistbuddy -c "Set CFBundleIdentifier $bundleIdentifier" "${plist}" 

ответ

0

так, как я в конечном итоге решение совместно брелка вопрос распределились следующим образом:

Создан одноплодный вспомогательной обертки класса для брелка, который устанавливает «KeyChainIdentifier " имущество. Это будет использоваться для установки уникального kSecAttrService для каждой отдельной среды при размещении значений в KeyChain.

т.е.

static CSKeyChain *instance; 

+ (void)initialize { 
    static BOOL initialized = NO; 
    if (!initialized) { 
     initialized = YES; { 
      NSString *keyChainIdentifier = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"KeyChainIdentifier"]; 
      instance = [[CSKeyChain alloc] initWithKeyChainIdentifier:keyChainIdentifier]; 
     } 
    } 
} 

Затем в настройках модуля Tests (функция) Я добавил

[CSKeyChain setValue:@"csTest" forKeyPath:@"instance.keyChainIdentifier"]; 

Единственная вещь, которую я сделал, было обеспечить при использовании сертификатов (kSecAttrKeyTypeRSA), то kSecAttrApplicationTag имеет keyChainIdentifier добавлен.

Таким образом, я смогу запустить модульные тесты, которые не будут мешать нормальной работе приложения, и, кроме того, путем изменения как keyChainIdentifier, так и BundleIdentifier, смогут запускать приложения для разных сред на одном устройстве. БУМ!

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