Не удается отправить приложение PhoneGap 1.0 в AppStore
У нас есть старое приложение, созданное с помощью PhoneGap версии 1.0. Нет абсолютно никакой возможности перейти на последнюю версию PhoneGap/Cordova из-за огромных изменений в требуемом коде iOS/JS.
Попытка загрузить приложение, скомпилированное с помощью iOS SDK 6.1, не удалась с сообщением: "Приложениям не разрешен доступ к UDID, и они не должны использовать метод UIDevice uniqueIdentifier. Пожалуйста, обновите ваши приложения и серверы, чтобы связать пользователей с введенными идентификаторами поставщика или рекламы". в iOS 6."
Исходники PhoneGap 1.0 не доступны публично, они распространяются в виде скомпилированного фреймворка.
У кого-нибудь есть идеи, как обойти эту проблему?
3 ответа
Сумасшедшее, но РАБОЧЕЕ решение (взломать)
Что ж, как только PhoneGap 1.0 будет предоставлен как скомпилированная библиотека, мы можем попытаться изменить сам скомпилированный двоичный файл.
Причиной отказа Apple являются обращения к методу [UIDevice uniqueIdentifier], который не поддерживается в iOS 6. Если ваше приложение (код JS) не использует UDID, предоставленный PhoneGap (на самом деле, даже не подозреваете, есть ли способ его получить), это безопасно (!? см. ПРИМЕЧАНИЕ ниже), чтобы изменить вызов uniqueIdentifier на любой другой метод, возвращающий NSString класса UIDevice.
Я использовал +(NSString *)systemVersion - получатель свойства systemVersion.
Итак, получите любой HEX-редактор и откройте файл: /users/Shared/PhoneGap/Frameworks/PhoneGap.framework/PhoneGap замените uniqueIdentifier на systemVersion \ 0 \ 0 \ 0.
\ 0 - это нулевые байты кода, необходимые для выравнивания длины нового имени на 3 байта короче!
Перестройте свое приложение, и… загрузка альта в AppStore прошла успешно!
ПРИМЕЧАНИЕ. Конечно, вы ДОЛЖНЫ проверить работоспособность вашего приложения на предмет его работоспособности. Я сделал для моего приложения, и это работает как шарм.
Нету. Apple, это ваша проблема здесь. Вы должны обновить PhoneGap как минимум до 2,5, см. Публикацию здесь: https://shazronatadobe.wordpress.com/2013/05/01/cordovaphonegap-and-the-new-apple-app-store-requirements/
И вы должны обновить любой плагин или родной, который вы написали, чтобы не использовать uuid.
У меня была та же проблема с использованием PhoneGap 1.2.0, но вышеупомянутый "взлом" не работал для меня - он дал мне ошибку
ld: file is universal (3 slices) but does not contain a(n) armv7 slice:
Поэтому вместо этого я нашел гораздо более простое решение - найдите PhoneGapLib.xcodeproj, который устанавливается при установке phonegap, и откройте его, а затем выполните поиск вызова "uniqueIdentifier".
Затем я использовал приведенный ниже код ( /questions/5824859/kak-myi-mozhem-protivostoyat-buduschemu-udaleniyu-udiduuid-v-ios-6-esli-myi-ispolzuem-phonegap/5824869#5824869), чтобы заменить значение UUID:
- (NSString *)getUUID
{
NSString *UUID = [[NSUserDefaults standardUserDefaults] objectForKey:@"uniqueID"];
if (!UUID)
{
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
UUID = [(__bridge NSString*)string stringByReplacingOccurrencesOfString:@"-"withString:@""];
[[NSUserDefaults standardUserDefaults] setValue:UUID forKey:@"uniqueID"];
}
return UUID;
}
Вызов этого метода с [self getUUID] вместо uniqueIdentifier работает, хотя по какой-то причине это привело к ошибке с последующим добавлением значения в словарь для версии телефонной пробелы. Так что я просто жестко закодировал это вместо того же блока, что и выше.
Затем измените цель на "PhoneGap", создайте, затем перейдите в папку "Продукты" и откройте местоположение в Finder, скопируйте папку фреймворка и замените папку, найденную в "Users/Shared/PhoneGap/Frameworks".
Проект должен скомпилироваться и быть принятым в App Store