Как собрать Adobe Air приложение для Mac OS AppStore


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

Для начала Вам нужно будет получить у Apple два сертификата:

  • Сертификат для установщика — INSTALLER_CERTIFICATE
  • Сертификат для приложения — APPLICATION_CERTIFICATE

Инструкции как получить сертификаты легко гуглятся.
После получения сертификатов их надо зарегистрировать в системе.
Все действия должны производиться в Mac OS.
Следующий шаг собрать своё приложение, для этого можно использовать Flash Builder 4.7 с Adobe Air SDK 3.6 или утилиту из Adobe Air SDK 3.6 «ADT». На этапе сборки совершенно не важно каким сертификатом вы подпишите своё приложение, сертификатами от Apple вы не сможете подписать приложение.
В результате вы должны получить файл типа bundle.app — фактически это просто архив с файлами вашего приложения и c air runtime. Вам понадобится установить XCode, если быть точнее то некоторые его утилиты.

Давайте создадим папку где-нибудь и назовём ее например build. Положим туда наш уже готовый bundle.app
Теперь Вам надо подготовить иконки для Вашего приложения из требований к иконкам это наличие всех размеров и названий файлов.

Создаем папку в build с название icons.iconset внутрь мы должны положить такие файлы(название файлов обязательно должно быть именно таким):

  1. icon_16x16.png — размер 16x16
  2. icon_16x16@2x.png — размер 32x32
  3. icon_32x32.png — размер 32x32
  4. icon_32x32@2x.png — размер 64x64
  5. icon_128x128.png — размер 128x128
  6. icon_128x128@2x.png — размер 256x256
  7. icon_256x256.png — размер 256x256
  8. icon_256x256@2x.png — размер 512x512
  9. icon_512x512.png — размер 512x512
  10. icon_512x512@2x.png — размер 1024x1024

Не спрашивайте зачем одинаковые иконки с разным названием файлов, так положено по userguide от Apple, если не будет хоть одного файла Вас просто не пропустит AppLoader.

Заходим в папку build c помощью Терминала(из консоли) и вводим команду:

iconutil -c icns "icons.iconset/"

в результате получаем файл icons.icns и копируем его в bundle.app/Contents/Resources с помощью команды:

cp icons.icns bundle.app/Contents/Resources/

удаляем из приложения webkit который запрещен у Apple(говорят он использует private API):

rm bundle.app/Contents/Frameworks/Adobe\ AIR.framework/Versions/Current/Resources/WebKit.dylib

даём полные права для папки с приложением:

chmod -R 777 bundle.app/

редактируем файл bundle.app/Contents/Info.plist он у вас должен выглядеть примено так:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>CFBundleAllowMixedLocalizations</key>
        <true/>
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <string>6.0</string>
        <key>LSMinimumSystemVersion</key>
        <string>10.6</string>
        <key>LSRequiresCarbon</key>
        <true/>
	<key>CFBundleIconFile</key>
	<string>icons.icns</string>
        <key>CFBundleIdentifier</key>
        <string>com.sitename.bundle</string>
	<key>LSApplicationCategoryType</key>
	<string>public.app-category.puzzle-games</string>
        <key>CFBundleGetInfoString</key>
        <string>1.0.0,</string>
        <key>CFBundleShortVersionString</key>
        <string>1.0.0</string>
        <key>NSHumanReadableCopyright</key>
        <string/>
        <key>CFBundleExecutable</key>
        <string>Fatty Maze</string>
        <key>NSHighResolutionCapable</key>
        <false/>
        <key>CFBundleLocalizations</key>
        <array>
            <string>en</string>
            <string>ru</string>
            <string>zh</string>
        </array>
    </dict>
</plist>


Разъясню один момент, в Info.plist обязательно надо указать в какой категории будет размещено ваше приложение это делается здесь:
<key>LSApplicationCategoryType</key>
<string>public.app-category.puzzle-games</string>

название категории строго регламентировано, список категорий можно посмотреть здесь

Снова заходим в папку build через Терминал и начинаем не посредственно подписывание сертификатом приложения и всех его компонентов с помощью следующих команд:

codesign -f -v -s APPLICATION_CERTIFICATE bundle.app/Contents/Frameworks/Adobe\ AIR.framework/Versions/1.0/Resources/AdobeCP15.plugin

codesign -f -v -s APPLICATION_CERTIFICATE bundle.app/Contents/Frameworks/Adobe\ AIR.framework/Versions/1.0/Resources/Flash\ Player.plugin/

codesign -f -v -s APPLICATION_CERTIFICATE bundle.app/Contents/Frameworks/Adobe\ AIR.framework/Versions/1.0/Resources/adobecp.plugin

codesign -f -v -s APPLICATION_CERTIFICATE bundle.app/Contents/Frameworks/Adobe\ AIR.framework/Versions/1.0

codesign -f -v -s APPLICATION_CERTIFICATE bundle.app

Вместо APPLICATION_CERTIFICATE вы должны вписать полное название Вашего сертификата оно у меня выглядит примерно так «3rd Party Mac Developer Application: Vasya Pupkin» кавычки обязательны.

Следующий шаг добавить поддержку песочницы. Создаем файл entitlements.plist в папке build c содержимым:
<?xml version="1.0" encoding="utf-8"?>
<plist version="1.0">
    <dict>
        <key>com.apple.security.app-sandbox</key>
        <true/>
    </dict>
</plist>

добавляем изменения в приложение и подписываем сертификатом с помощью команды из терминала находясь в папке build:

codesign -f -v -s --entitlements entitlements.plist bundle.app/

чтобы удостоверится, что всё правильно сделано команда:

codesign --display --entitlements - bundle.app

В результате вы должны увидеть содержание вашего entitlements.plist, если содержания в выводе нету, значит вы сделали что-то не правильно.

И наконец product build:

productbuild --component bundle.app /Applications bundleInstaller.pkg --sign INSTALLER_CERTIFICATE

У меня INSTALLER_CERTIFICATE выглядит примерно так «3rd Party Mac Developer Installer: Vasya Pupkin» кавычки обязательны.

Проверяем всё ли правильно подписалось:

sudo installer -store -pkg bundleInstaller.pkg -target /

Если процент дошёл до 100 и вы не увидели ошибок, Поздравляю значит всё правильно сделано и можно отправлять на аппрув.

P.S. Мы создали игру для iOS на Adobe Air и портировали её с небольшими изменениями для MacOS, сейчас наше приложение проходит аппрув в MacOS.
Специально не указываю названий и ссылок приложения, это всё таки не пиар статья.

Все манипуляции были получены из этих источников и этими методами:
  1. http://pigsels.com/2012/04/air-app-store-publishing-guide/
  2. http://forums.adobe.com/message/4564789#4564789
  3. Метод научного тыка.
  4. Сообщения об ошибках получаемых от Apple (некоторые описания ошибок блещут полнотой, до невозможности — Status: Invalid Binary. И пойди пойми почему!)


UPD:
при сборке приложения с Adobe air 3.8 произошли некоторые изменения.
Больше не нужны эти команды:
codesign -f -v -s APPLICATION_CERTIFICATE bundle.app/Contents/Frameworks/Adobe\ AIR.framework/Versions/1.0/Resources/adobecp.plugin
(не нужно)

codesign -f -v -s APPLICATION_CERTIFICATE bundle.app (не нужно)

codesign -f -v -s --entitlements entitlements.plist bundle.app/ (не работает)

а вместо этих трех строчек одна:
codesign -f -v -s APPLICATION_CERTIFICATE --entitlements entitlements.plist bundle.app/

Cпасибо за новую информацию pozirk

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 2

    0
    «сертификатами от Apple вы не сможете подписать приложение», это неверное утверждение. Сертификат p12 экспортируется в MacOS стандартными средствами.
    Дальше во Flash Builder 4.7 или Flash CS6, приложение для AppStore билдается двумя кликами мышки.
    Небольшие приседания начинаются когда в приложении используется библиотеки Adobe Native Extension. В этом случае потребуется iPhoneOS6.0.sdk из xCode 4 (ставится в macos 10.8) и билд делается с помощью ADT.
      0
      пытаюсь собрать игру под мак, использую air3.8, так что скорее всего это из-за него, но это уже не работает, нет такого файла.
      codesign -f -v -s APPLICATION_CERTIFICATE bundle.app/Contents/Frameworks/Adobe\ AIR.framework/Versions/1.0/Resources/adobecp.plugin

      так же не работает это:
      codesign -f -v -s --entitlements entitlements.plist bundle.app/

      зато работает такой варинат:
      codesign -f -v -s — --entitlements entitlements.plist bundle.app/

      т.е. не хватает одного тире. может я что не так делаю?

      Only users with full accounts can post comments. Log in, please.