Что может вызвать «неверный бинарный файл» без последующего отслеживания электронной почты из iTunes Connect? - PullRequest
38 голосов
/ 08 августа 2010

Я пытаюсь отправить обновление существующего приложения от имени одного из моих клиентов, и я получаю сбои "Invalid Binary" из iTunes Connect без объяснения ошибки.Завтра я уезжаю на двухнедельный отпуск без доступа к сети, поэтому я немного отчаянно нуждаюсь в решении.Будем благодарны за любые идеи.

Это обновление меняет название приложения и исправляет несколько мелких ошибок.Я делал предыдущие заявки через iTunes Connect, но я отправляю это обновление через XCode, как того требует Apple.

Я назначил себя техническим контактом для этого клиента, поэтому я получаю уведомление, когда помещаюновая версия в состоянии «Ожидание загрузки» через iTunes Connect.Когда я затем проверяю двоичный файл через органайзер Xcode, инструмент в конце концов сообщает, что двоичный файл действителен.Когда я отправляю двоичный файл через органайзер Xcode, он в конечном итоге возвращается и сообщает, что двоичный файл успешно загружен.Оба эти шага занимают некоторое время (может быть по 15 минут каждый), возможно, потому что пакет приложений составляет 63 мегабайта с тысячами ресурсов.

В течение следующего часа или двух портал iTunes Connect по-прежнему сообщает, что приложение находится всостояние «Ожидание загрузки».Я полагаю, что некоторая задержка является нормальной между временем, когда загрузка завершается в XCode, и когда состояние изменяется в iTunes Connect.Эти часы задержки кажутся чрезмерными, но я полагаю, что это не совсем удивительно, учитывая размер приложения.

В конечном итоге состояние просто незаметно меняется на «Invalid Binary» в iTunes connect.Я понимаю, что iTunes Connect должен отправить электронное письмо с объяснением ошибки, когда это происходит, но я ничего не получаю, равно как и мой клиент.(Я предполагаю, что он должен быть доступен всем пользователям, помеченным для уведомления об изменениях состояния приложения в iTunes Connect. Это предположение верно?)

Вот параметры сборки, скопированные и вставленные из моей конфигурации дистрибутива App Store:

ADDITIONAL_SDKS = 
ARCHS = $(ARCHS_STANDARD_32_BIT)
SDKROOT = iphoneos4.0
ONLY_ACTIVE_ARCH = YES
VALID_ARCHS = armv6 armv7
SYMROOT = /Users/cduhn/Documents/workspace/xcode_build_output
OBJROOT = $(SYMROOT)
CONFIGURATION_BUILD_DIR = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
CONFIGURATION_TEMP_DIR = $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
SHARED_PRECOMPS_DIR = $(CACHE_ROOT)/SharedPrecompiledHeaders
BUILD_VARIANTS = normal
DEBUG_INFORMATION_FORMAT = dwarf-with-dsym
ENABLE_OPENMP_SUPPORT = NO
GENERATE_PROFILING_CODE = NO
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = YES
RUN_CLANG_STATIC_ANALYZER = NO
SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = NO
VALIDATE_PRODUCT = NO
CODE_SIGN_ENTITLEMENTS = Entitlements.plist
CODE_SIGN_IDENTITY = 
CODE_SIGN_IDENTITY[sdk=iphoneos*] = iPhone Distribution: Capturing Moments
CODE_SIGN_RESOURCE_RULES_PATH = 
OTHER_CODE_SIGN_FLAGS = 
STRIPFLAGS = 
ALTERNATE_GROUP = $(INSTALL_GROUP)
ALTERNATE_OWNER = $(INSTALL_OWNER)
ALTERNATE_MODE = $(INSTALL_MODE_FLAG)
ALTERNATE_PERMISSIONS_FILES = 
DEPLOYMENT_LOCATION = NO
DEPLOYMENT_POSTPROCESSING = NO
INSTALL_GROUP = $(GROUP)
INSTALL_OWNER = $(USER)
INSTALL_MODE_FLAG = u+w,go-w,a+rX
DSTROOT = /tmp/$(PROJECT_NAME).dst
INSTALL_PATH = $(HOME)/Applications
MACOSX_DEPLOYMENT_TARGET = $(inherited)
SKIP_INSTALL = YES
COPY_PHASE_STRIP = YES
STRIP_INSTALLED_PRODUCT = 
STRIP_STYLE = all
TARGETED_DEVICE_FAMILY = 1
SEPARATE_STRIP = NO
IPHONEOS_DEPLOYMENT_TARGET = 3.0
MODULE_NAME = 
MODULE_START = 
MODULE_STOP = 
MODULE_VERSION = 
BUNDLE_LOADER = 
STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = dynamic
DYLIB_COMPATIBILITY_VERSION = 
DYLIB_CURRENT_VERSION = 
LINKER_DISPLAYS_MANGLED_NAMES = NO
PRESERVE_DEAD_CODE_INITS_AND_TERMS = NO
LD_DYLIB_INSTALL_NAME = 
EXPORTED_SYMBOLS_FILE = 
INIT_ROUTINE = 
LINK_WITH_STANDARD_LIBRARIES = YES
MACH_O_TYPE = mh_execute
LD_OPENMP_FLAGS = -fopenmp
ORDER_FILE = 
OTHER_LDFLAGS = -all_load -ObjC
LD_MAP_FILE_PATH = $(TARGET_TEMP_DIR)/$(PRODUCT_NAME)-LinkMap-$(CURRENT_VARIANT)-$(CURRENT_ARCH).txt
GENERATE_MASTER_OBJECT_FILE = NO
PREBINDING = NO
PRELINK_LIBS = 
KEEP_PRIVATE_EXTERNS = NO
LD_RUNPATH_SEARCH_PATHS = 
SEPARATE_SYMBOL_EDIT = NO
PRELINK_FLAGS = 
SECTORDER_FLAGS = 
UNEXPORTED_SYMBOLS_FILE = 
WARNING_LDFLAGS = 
LD_GENERATE_MAP_FILE = NO
COMPRESS_PNG_FILES = YES
APPLY_RULES_IN_COPY_FILES = NO
EXECUTABLE_EXTENSION = 
EXECUTABLE_PREFIX = 
INFOPLIST_EXPAND_BUILD_SETTINGS = YES
GENERATE_PKGINFO_FILE = YES
FRAMEWORK_VERSION = A
INFOPLIST_FILE = iRevealMaui-Info.plist
INFOPLIST_OTHER_PREPROCESSOR_FLAGS = 
INFOPLIST_OUTPUT_FORMAT = binary
INFOPLIST_PREPROCESSOR_DEFINITIONS = 
INFOPLIST_PREFIX_HEADER = 
INFOPLIST_PREPROCESS = NO
COPYING_PRESERVES_HFS_DATA = NO
PRIVATE_HEADERS_FOLDER_PATH = $(CONTENTS_FOLDER_PATH)/PrivateHeaders
PRODUCT_NAME = iRevealMaui
PLIST_FILE_OUTPUT_FORMAT = binary
PUBLIC_HEADERS_FOLDER_PATH = $(CONTENTS_FOLDER_PATH)/Headers
STRINGS_FILE_OUTPUT_ENCODING = binary
WRAPPER_EXTENSION = app
ALWAYS_SEARCH_USER_PATHS = NO
FRAMEWORK_SEARCH_PATHS = 
HEADER_SEARCH_PATHS = ${SDKROOT}/usr/include/libxml2/** ../three20/Build/Products/three20
LIBRARY_SEARCH_PATHS = $(inherited) "$(SRCROOT)/../desiccant/Classes/External/google-analytics"
REZ_SEARCH_PATHS = 
EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = *.nib *.lproj *.framework *.gch (*) CVS .svn *.xcodeproj *.xcode *.pbproj *.pbxproj
INCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = 
OTHER_TEST_FLAGS = 
TEST_HOST = 
TEST_RIG = 
CURRENT_PROJECT_VERSION = 
VERSION_INFO_FILE = $(PRODUCT_NAME)_vers.c
VERSION_INFO_EXPORT_DECL = 
VERSION_INFO_PREFIX = 
VERSION_INFO_SUFFIX = 
VERSIONING_SYSTEM = 
VERSION_INFO_BUILDER = $(USER)
GCC_FAST_OBJC_DISPATCH = YES
GCC_AUTO_VECTORIZATION = NO
GCC_OBJC_CALL_CXX_CDTORS = YES
GCC_ENABLE_SSE3_EXTENSIONS = NO
GCC_ENABLE_SSE41_EXTENSIONS = NO
GCC_ENABLE_SSE42_EXTENSIONS = NO
GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = NO
GCC_STRICT_ALIASING = NO
GCC_FEEDBACK_DIRECTED_OPTIMIZATION = Off
GCC_ENABLE_FIX_AND_CONTINUE = NO
GCC_GENERATE_DEBUGGING_SYMBOLS = YES
GCC_DYNAMIC_NO_PIC = YES
GCC_GENERATE_TEST_COVERAGE_FILES = NO
GCC_INLINES_ARE_PRIVATE_EXTERN = YES
GCC_MODEL_TUNING = G4
GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO
GCC_ENABLE_KERNEL_DEVELOPMENT = NO
GCC_DEBUGGING_SYMBOLS = default
GCC_REUSE_STRINGS = YES
GCC_NO_COMMON_BLOCKS = NO
GCC_ENABLE_OBJC_GC = unsupported
GCC_OPTIMIZATION_LEVEL = s
GCC_FAST_MATH = NO
GCC_ENABLE_SYMBOL_SEPARATION = YES
GCC_THREADSAFE_STATICS = YES
GCC_SYMBOLS_PRIVATE_EXTERN = YES
GCC_UNROLL_LOOPS = NO
GCC_MODEL_PPC64 = NO
GCC_CHAR_IS_UNSIGNED_CHAR = NO
GCC_ENABLE_ASM_KEYWORD = YES
GCC_C_LANGUAGE_STANDARD = c99
GCC_CHECK_RETURN_VALUE_OF_OPERATOR_NEW = NO
GCC_CW_ASM_SYNTAX = YES
GCC_INPUT_FILETYPE = automatic
GCC_ALTIVEC_EXTENSIONS = NO
GCC_ENABLE_CPP_EXCEPTIONS = YES
GCC_ENABLE_CPP_RTTI = YES
GCC_LINK_WITH_DYNAMIC_LIBRARIES = YES
GCC_ENABLE_OBJC_EXCEPTIONS = YES
GCC_ENABLE_TRIGRAPHS = NO
GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS = NO
GCC_USE_INDIRECT_FUNCTION_CALLS = NO
GCC_USE_REGISTER_FUNCTION_CALLS = NO
GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO
OTHER_CPLUSPLUSFLAGS = $(OTHER_CFLAGS)
GCC_PRECOMPILE_PREFIX_HEADER = YES
GCC_PREFIX_HEADER = iRevealMaui_Prefix.pch
GCC_ENABLE_BUILTIN_FUNCTIONS = YES
GCC_ENABLE_PASCAL_STRINGS = YES
GCC_FORCE_CPU_SUBTYPE_ALL = NO
GCC_SHORT_ENUMS = NO
GCC_ONE_BYTE_BOOL = NO
GCC_USE_STANDARD_INCLUDE_SEARCHING = YES
GCC_PREPROCESSOR_DEFINITIONS = 
GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = 
GCC_WARN_CHECK_SWITCH_STATEMENTS = NO
GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO
GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO
GCC_WARN_ABOUT_GLOBAL_CONSTRUCTORS = NO
GCC_WARN_SHADOW = NO
GCC_WARN_64_TO_32_BIT_CONVERSION = NO
GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES
GCC_WARN_INHIBIT_ALL_WARNINGS = NO
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO
GCC_WARN_ABOUT_RETURN_TYPE = YES
GCC_WARN_MISSING_PARENTHESES = NO
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO
GCC_WARN_ABOUT_MISSING_NEWLINE = NO
GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO
WARNING_CFLAGS = 
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO
GCC_WARN_PEDANTIC = NO
GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES
GCC_WARN_PROTOTYPE_CONVERSION = NO
GCC_WARN_SIGN_COMPARE = NO
GCC_WARN_STRICT_SELECTOR_MATCH = NO
GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = NO
GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS = NO
GCC_TREAT_WARNINGS_AS_ERRORS = NO
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES
GCC_WARN_UNDECLARED_SELECTOR = NO
GCC_WARN_UNINITIALIZED_AUTOS = NO
GCC_WARN_UNKNOWN_PRAGMAS = NO
GCC_WARN_UNUSED_FUNCTION = NO
GCC_WARN_UNUSED_LABEL = NO
GCC_WARN_UNUSED_PARAMETER = NO
GCC_WARN_UNUSED_VALUE = NO
GCC_WARN_UNUSED_VARIABLE = YES
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES
GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = YES
IBC_FLATTEN_NIBS = YES
IBC_OTHER_FLAGS = 
IBC_PLUGIN_SEARCH_PATHS = 
IBC_PLUGINS = 
IBC_ERRORS = YES
IBC_NOTICES = YES
IBC_WARNINGS = YES

Вот содержимое моего Info.plist:

Любые идеи приветствуются.

EDIT - Видимообъяснение задержки изменения статуса

Судя по моей истории статусов, кажется, что статус "Invalid Binary" фактически устанавливается в течение нескольких минут, но iTunes Connect скрывает этот факт с плохо разработанной стратегией кэширования.

Чтобы отслеживать изменения в состоянии, я обновляю и нажимаю между четырьмя страницами: «Управление приложениями», страница «Информация о приложении», «Просмотр сведений» и «История состояния».Когда наконец обновляется история состояний, это показывает, что приложение перешло в состояние «Недопустимый двоичный файл» примерно за час до этого.

В качестве эксперимента я попытался изменить свой идентификатор приложения и отправить двоичный файл в качестве нового приложения.На этот раз я нажал на страницу «Подробности» через несколько минут после отправки двоичного файла.Его статус показывал «Загрузить получено».Видимый прогресс!Пару минут спустя я щелкнул в «Истории состояния», и она показала «Invalid Binary» всего через несколько минут после завершения загрузки.Затем я вернулся и обновил страницу «Просмотр деталей».Он по-прежнему показывает «Upload Received», несмотря на то, что в истории состояния отображается «Invalid Binary».Это довольно четкое свидетельство того, что все эти страницы кэшируются и показывают устаревшие данные в течение длительных периодов времени.Я понял это только после повторной отправки бинарного файла как нового приложения, потому что я загружал страницы для этого приложения в первый раз.

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

Ответы [ 30 ]

32 голосов
/ 10 августа 2010

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

Очевидно, есть ошибка, позволяющая вашему бинарному файлу пройти проверку и загрузку, но затем получитьотклонено системой iTunes Connect.И вы не получите письмо с объяснением того, что произошло!

Если ваше приложение предназначено как для iPhone, так и для iPad, то, вероятно, что-то подобное в файле Info.plist:

screenshot before

Вы должны полностью удалить параметр CFBundleIconFiles~ipad и включить вместо него значок iPad в массив Icons files, как показано здесь:

screenshot after fix

Это все, ребята!

Дайте мне знать, помогло ли это вам!

10 голосов
/ 16 октября 2010

У меня была такая же ошибка INVALID BINARY в iTunes Connect, даже если Application Loader принял мой двоичный файл. Решение было очень простым ...

Откройте ваш info.plist, щелкните правой кнопкой мыши и отметьте Показать необработанный ключ / значения :

  • CFBundleIconFile = Icon.png (мой значок iPhone 57x57 PNG)
  • CFBundleIconFile ~ ipad = Icon-72.png (мой значок ipad 72x72 PNG)
  • CFBundleIconFiles = массив
    • Item 0 = Icon.png
    • Элемент 1 = Icon@2x.png (мой значок iPhone 4 114x114 PNG)
    • Item 2 = Icon-72.png

Сохранение, очистка всех целей, создание и анализ, сжатие в Finder и повторная отправка!

Ошибка была вызвана тем, что я набрал клавишу «Файлы значков». В необработанном виде это сопоставлено с «файлами значков» вместо CFBundleIconFiles. У меня Xcode 3.2.3, я думаю, Xcode 3.2.4 лучше отображает этот ключевой идентификатор.

Удачи всем!

Источник: Технические вопросы и ответы QA1686: значки приложений на iPad и iPhone

8 голосов
/ 18 августа 2010

Спасибо всем, кто предложил решения. Оказывается, ни одно из ваших предложений не помогло в моем случае, но я решил проблему. Вот что сработало для меня:

Удалите Entitlements.plist из вашего проекта. Затем выполните Добавить -> Новый файл и повторно добавьте Entitlements.plist.

Формат Entitlements.plist изменился между SDK 3.1.3 и 3.2. Если ваш Entitlements.plist был создан с SDK более ранней, чем 3.2, и вы сейчас пытаетесь обновить свое приложение с помощью SDK 3.2 или более поздней версии, похоже, вам нужно удалить Entitlements.plist и повторно добавить его, используя новый формат , В противном случае Apple отклонит ваше обновление как «Недопустимый бинарный код».

7 голосов
/ 06 января 2011

У меня была такая же проблема в течение нескольких дней. Кажется, что эта ошибка может быть вызвана множеством разных проблем, поэтому жаль, что Apple не уточнила ошибку по электронной почте.

Для меня решение состояло в том, чтобы вообще не использовать «Загрузчик приложений»!

Вместо этого сделайте следующее в Xcode:

  • Выберите приложение, перейдите в «Сборка»> «Сборка и архивирование»
  • По завершении перейдите в Окно> Органайзер
  • Выберите ваше приложение в разделе «Архивные приложения»
  • Нажмите «Подтвердить»
  • Если проверка прошла успешно (как у меня):
  • нажмите «Отправить».

После этого приложение будет отправлено в компанию apple. Для меня через несколько секунд статус был изменен на «Ожидание проверки», а не «Недействительный двоичный файл».

3 голосов
/ 18 июня 2012

Используйте инструменты сборки и архивирования в XCode, как описано в другом ответе здесь.

По какой-то причине средство архивации вызвало в Apple что-то, чтобы отправить электронное письмо, сообщающее, что на самом деле не так (поврежденный файл PNG).

Моя проблема? Xcode повреждает некоторые файлы PNG, когда сжимает их. Перейдите в «Настройки сборки», посмотрите в разделе «Упаковка» и установите «Сжать PNG файлы» на №.

3 голосов
/ 09 мая 2013

В настоящее время (8 мая 2013 г.) эта ошибка выдается, если вы обращаетесь к UDUD в своем приложении. MKStoreKit (популярная библиотека с открытым исходным кодом) делает, и это было то, что вызывало это для меня. Найдите приведенный ниже метод в своих файлах (при условии, что он находится не в предварительно скомпилированном двоичном файле, в этом случае перейдите в Google, чтобы у вас было все, и проверьте их заметки о выпуске)

[UIDevice currentDevice] .uniqueIdentifier

3 голосов
/ 01 ноября 2011

В XCode, нажмите на название вашего приложения на левой стороне и перейдите на вкладку настроек сборки на правой стороне.Прокрутите вниз до «Идентификация подписи кода» -> «Выпуск»

Убедитесь, что выбран ваш профиль распространения.Я не осознавал, что должен был явно установить это, и мое приложение было проверено просто отлично, но двоичный код недействителен.Моя настройка все еще была в профиле разработчика

2 голосов
/ 17 июля 2015

Ни один из ответов здесь не помог мне.Я использую Cocoapods в моем проекте.Почему-то в настройках проекта Cocoapods Base SDK и поддерживаемых платформ был установлен OSX.(Версия Cocoapods: 0.37.2) Я переключил его на iOS, и он работал.My Cocoapods Project Settings

1 голос
/ 15 апреля 2011

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

Отсутствует право на push-уведомление. Ваше приложение регистрируется в службе Apple Push-уведомления, но права на подпись приложения не включают в себя необходимые права на «aps-environment». Убедитесь, что вы включили службы push-уведомлений для этого приложения и загрузили профиль обеспечения распространения, включающий право «aps-environment».

После устранения проблемы вернитесь на страницу сведений о версии приложения в модуле «Управление приложениями» в iTunes Connect и нажмите кнопку «Готово к отправке двоичных файлов». Это проведет вас через двоичный поток отправки и вернет статус версии вашего приложения в Ожидание загрузки. Затем вы можете использовать Application Loader для загрузки вашего нового двоичного файла. Если с вашей заявкой будут обнаружены какие-либо другие проблемы, с вами свяжутся.

1 голос
/ 21 октября 2011

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

Я отправлял изображение по умолчанию 1024x768, но нашел в этой статье:

http://weston -fl.com / blog /? P = 840 /

Это должно быть 1024x748 (для альбомной ориентации по умолчанию) и мне кажется, это сработало: iTunesconnect взял его после этого.

...