Подтвердить что ты не робот

Есть ли какие-либо указания относительно того, какие платформы Apple допускают встроенную сборку?

Я некоторое время пытаюсь дешифровать то, что является статусом встроенной сборки на разных платформах с момента объявления Apple анонсированного битового кода.

Как сейчас (Xcode 7.1.1) это то, что я наблюдаю:

  • OSX - разрешено (я всегда буду ожидать)
  • iOS - разрешено даже с битовым кодом (встроенная сборка помещается в биткод) с вероятным подтверждением
  • watchOS - не разрешено (не будет компилироваться, дает встроенную сборку, отключена ошибка)
  • tvOS - разрешено

Однако, это сомнительные выводы, поскольку у меня нет приложений на каждом рынке, чтобы это проверить.

Я видел несколько сообщений из библиотек с открытым исходным кодом и приложений, в которых приложения IOS будут отклонены, если они содержат встроенный сборник и. Я видел некоторые сообщения о том, что tvOS похож на watchOS и не позволит вам использовать встроенную сборку (может быть, исправлена ​​в последнем Xcode?)

Есть ли какая-то твердая ссылка от Apple или... В какой-то мере, на каких платформах я могу использовать встроенную сборку?

4b9b3361

Ответ 1

На любой платформе ARM (iOS, watchOS, tvOS), если вы предоставляете смешанный архив bitcode/asm, он может ТОЛЬКО (см. подробности ниже) скомпилироваться для той же архитектуры, что и встроенный asm. Это означает, что вы можете просто представить полное бинарное приложение, ориентированное на эту архитектуру, - нет абсолютно никакого преимущества для отправки битового кода (и, следовательно, нет причин для Apple разрешать его).

В соответствии с Яблочный docs) требуется биткод для watchOS и tvOS, и поэтому встроенная сборка отключена.

Примечание. Для приложений iOS биткод является стандартным, но необязательным. Для watchOS и приложения tvOS, требуется биткод. Если вы предоставляете биткод, все приложения и рамки в комплекте приложений (все цели в проекте) должны включить биткод. После того, как вы распространяете свое приложение с помощью iTunes Connect, вы можете загрузить файл dSYMs для сборки, описанный в разделе "Просмотр" и "Импорт сбоев" в окне "Устройства".

В X86 архив, содержащий смесь биткода и X86 ASM, может быть скомпилирован в 64-битное приложение. Не очевидно, что это разумная вещь, потому что, по-видимому, ручной ассемблер - это критический раздел производительности, но он может работать.

То же самое не относится к ARM. Случай X86 работает, потому что набор команд X86 является чистым подмножеством X86_64, что означает, что любой ассемблер X86 является допустимым ассемблером X86_64. В ARM 64-разрядный процессор должен запускаться в 32-разрядном состоянии для выполнения 32-битного кода. Вы не можете смешивать 32 и 64-битную сборку в том же приложении, что и в ARM docs (см. Изменение состояния выполнения)

... Практически это означает, что вы не можете иметь смешанное 32-битное и 64-битное приложение, потому что между ними нет прямого способа вызова.

Это означает, что если вы предоставляете смесь битового кода плюс встроенный asm-таргетинг ARM-архитектуры ARCH, практически единственное, что может сделать AppStore (по крайней мере, в настоящее время), это компиляция вашего битового кода для ARCH, что дает вам (скажем) полностью 32-разрядное приложение, работающее на 64-битном процессоре. Какой смысл? Было бы намного проще загрузить обычный 32-битный исполняемый файл без битового кода.