Как повторно заархивировать файл app.ipa, используя xcode4 с обновленным специальным профилем? - PullRequest
1 голос
/ 16 августа 2011

Предположим, что:

  • XCode4 используется для «Архивации» проекта и создания файла app.ipa, который был подписан с использованием специального профиля
  • Профиль Ad-Hoc осведомлен о 10 различных устройствах iOS. Это означает, что app.ipa можно отправить 10 человек для тестирования
  • Теперь, если одиннадцатое (11-е) устройство добавлено в профиль Ad-Hoc через портал Apple, мы получим обновленный профиль!

Учитывая, что:

  • мы НЕ хотим создавать новый «Архив» с использованием XCode, потому что много кода изменилось
  • мы просто хотим получить тот же файл app.ipa и заново подписать его с профилем обновления, чтобы мы могли начать отправку приложения на 11-е устройство также и в режиме ad-hoc.

Что можно сделать для этого?

  • Пожалуйста, НЕ предлагайте использовать хранилище для проверки более ранней версии кода, а затем использовать архив с обновленным профилем. Я уже знаю об этом обходном пути и хочу вариант, который намного более технологически удобен, чем этот

UPDATE:

Благодаря этому блогу: http://blog.futureshock -ed.com / Xcode-ад-скакательная-инициализация-сертификаты боль

Я понял, что могу просто открыть Организатор в своем XCode 4, выбрать любую из ранее заархивированных сборок, и когда я снова собираюсь сгенерировать app.ipa, он будет использовать недавно импортированный и обновленный профиль обеспечения adhoc, чтобы создать файл ipa.

Как импортировать обновленный профиль обеспечения перед выполнением этого действия? Хорошо, просто дважды щелкните по недавно загруженному профилю и убедитесь, что удалили его старшего брата в всплывающем окне, чтобы показать, что они оба сейчас сидят на вашем Mac. Вы можете определить, какой из них старше, визуально проверив значение «Дата создания»

Это должно было быть очевидно, но почему-то это не так, мне интересно, сколько других страдают от того же недуга.

1 Ответ

0 голосов
/ 16 августа 2011

Должно работать что-то вроде следующего (взято из созданного мною проекта, который создает приложения с помощью инструмента командной строки xcodebuild):

- (BOOL)createSignedIPA:(NSError **)error
{
   [self.delegate builder:self didUpdateStatus:@"creating IPA, please be patient ..."];

   NSTask *task = [[NSTask alloc] init];
   NSString *path = @"/usr/bin/xcrun";
   [task setLaunchPath: path];

   NSString *input = [MOB_PROJECT_DIR stringByExpandingTildeInPath];
   input = [NSString stringWithFormat:@"%@/build/%@-iphoneos/yourapp.app", input, isDemoApp ? @"Debug" : @"Release"]; 

   NSString *output = [@"~/Desktop" stringByExpandingTildeInPath];
   output = [NSString stringWithFormat:@"%@/%@%ld.ipa", output, isDemoApp ? @"demo" : @"app", appIdentifier];

   NSString *bundleIdentifier = [self bundleIdentifier];
   NSString *profile = [self pathForProfileWithBundleIdentifier:bundleIdentifier error:error];   
   if (!profile) 
      if (*error) 
         return NO;
      else 
      {
         NSString *message = [NSString stringWithFormat:@"no profile found for bundle %@", bundleIdentifier];
         NSDictionary *userInfo = [NSDictionary dictionaryWithObject:message forKey:NSLocalizedDescriptionKey];
         *error = [NSError errorWithDomain:MOB_APP_DOMAIN code:MOB_ERR_PROFILE_NOT_FOUND userInfo:userInfo];
         return NO;
      }

   NSLog(@"%@", profile);

   NSArray *arguments = [NSArray arrayWithObjects:
                         @"-sdk", @"iphoneos5.0", 
                         @"PackageApplication", input,
                         @"-o", output, 
                         @"--sign", isDemoApp ? @"Wolfgang Schreurs (YK9DVMECC4)" : @"My Company",
                         @"--embed", profile,
                         @"-verbose",
                         nil];
   [task setArguments:arguments];

   NSString *projectDirectory = [MOB_PROJECT_DIR stringByExpandingTildeInPath];
   [task setCurrentDirectoryPath:projectDirectory];

   NSPipe *pipe = [NSPipe pipe];
   [task setStandardOutput: pipe];
   [task setStandardInput:[NSPipe pipe]]; 
   NSFileHandle *file = [pipe fileHandleForReading];

   [task launch];

   NSData *data = [file readDataToEndOfFile];
   NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

   [self.delegate builder:self didUpdateStatus:string];

   return YES;
}

В этом фрагменте выше я беру * .app из каталога сборкии создайте подписанный IPA, используя профиль обеспечения из ~/Library/MobileProvisioning (или что-то в этом роде).

...