Надіслати проблеми App Store: Непідтримувана архітектура x86


252

Тому я намагаюся використовувати API Shopify. Коли я архівую програму та перевіряю її, тоді проблем не виникає, але коли я надсилаю її до магазину додатків, вона надає мені наступні проблеми.

  1. ПОМИЛКА ITMS-90087: "Непідтримувана архітектура. Ваш виконуваний файл містить непідтримувану архітектуру '[x86_64, i386]'."
  2. ПОМИЛКА ITMS-90209: "Недійсна вирівнювання сегмента. Бінарний додаток на SJAPP.app/Frameworks/Buy.framework/Buy не має належного вирівнювання сегмента. Спробуйте відновити додаток із останньою версією Xcode." (Я вже використовую останню версію.)
  3. ПОМИЛКА ITMS-90125: "Бінарний файл недійсний. Інформація про шифрування в команді завантаження LC_ENCRYPTION_INFO відсутня або недійсна, або двійковий файл уже зашифрований. Цей двійковий файл, здається, не був створений за допомогою Linker Apple."
  4. ПОПЕРЕДЖЕННЯ ITMS-90080: "Виконавча корисна навантаження /..../ Buy.framework не є незалежною від позиції виконуваною. Будь ласка, переконайтесь, що параметри побудови ур налаштовані для створення виконуваних файлів PIE."

4
Перше повідомлення звучить так, ніби це побудова симулятора.
Філіп Міллс

Коли я створю архів для подання, я вибираю пристрої iOS в параметрах пристроїв, а потім створюю архів, якщо те, про що ти просиш
Saurabh Jain

2
Я згоден з @PhillipMills. Концентруйтесь на першій помилці. Чому у вашому додатку для iOS є двійковий файл x86_64? Або ви зробили щось дивне зі своїми налаштуваннями збирання ... або ви завантажили збірку Simulator.
Стівен Дарлінгтон

@ pAkY88. Я не зміг. Нещодавно я опублікував на форумі Shopify API і чекаю відповіді. Обов’язково викладу щось, якщо я натраплю на одне
Saurabh Jain

У мене була така поведінка, коли я завантажував програму Application Loader 3.5
SudoPlz

Відповіді:


394

Проблема полягає в тому, що рамка Buy містить збірку як для симулятора (x86_64), так і для фактичних пристроїв (ARM).

Звичайно, ви не можете подавати в App Store бінарний файл для непідтримуваної архітектури, тому рішенням потрібно "вручну" видалити непотрібні архітектури з остаточного бінарного файлу, перш ніж надсилати його.

Деніел Кеннет придумав гарне рішення і надає цей сценарій для додавання до фази збірки:

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
    FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
    FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
    echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"

    EXTRACTED_ARCHS=()

    for ARCH in $ARCHS
    do
        echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
        lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
        EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
    done

    echo "Merging extracted architectures: ${ARCHS}"
    lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
    rm "${EXTRACTED_ARCHS[@]}"

    echo "Replacing original executable with thinned version"
    rm "$FRAMEWORK_EXECUTABLE_PATH"
    mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"

done

Я ним користувався, і він справно працював.

EDIT: переконайтеся, що ви переглянули модифікований сценарій, розміщений Varrry, оскільки у цього є незначні проблеми.


6
@ pAkY88 Я використовував цей скрипт у своєму проекті Xcode для вирішення згаданих вище проблем App Store, але тепер, коли я переходжу до Build, у мене є багато фатальних помилок -> фатальна помилка: lipo: вхідний файл (/ ... Frameworks / Bolts.framework / Bolts) повинен бути жирним файлом, коли вказано параметр -extract. Будь-які ідеї, як це виправити?
SamoanProgrammer

52
Я думаю, що це досить нерозумно: вам потрібно поєднувати arm + x86, щоб ваш додаток працював як на тренажері, так і на пристрої, і потрібно зняти x86, щоб подати в магазин додатків. Чому Apple не робить смужку на їх кінці, доки не буде виявлено x86? Вони можуть допомогти багатьом технічним причинам, щоб захистити це, але жодної ділової причини, оскільки це зовсім не зручно для користувачів.
superarts.org

5
@Skoua Виберіть відповідну ціль, потім "Фази побудови" та поставте її після дії "Вставити рамки"
Пьотр Тобольський,

6
Наведений вище сценарій корисний, але ніде не згадується про кроки для запуску сценарію в Xcode. Щоб запустити цей скрипт, перейдіть до TARGETS -> виберіть Фази збірки, а потім верхній заголовок у Xcode, натисніть Редактор -> Додати фази збірки -> Додати запуск сценарію Фази збірки, і ви отримаєте стовпець у розділі Фаза збірки TARGET. Тут ви можете скопіювати пасту вище сценарію та успішно завантажити його в Appstore.
шаші Гупта

5
Не працює в Xcode 11.2 - хтось знайшов рішення?
JMIT

178

Відповідь, яку дає pAkY88, працює, але я зіткнувся з тією ж проблемою, що і Маріо Гусман в https://stackoverflow.com/a/35240555/5272316 : коли ми вирізаємо невикористані архітектури, ми більше не можемо запускати сценарій, оскільки він намагається видалити не існує існуючих фрагментів, оскільки xcode не вставляє бінарний файл кожен раз. Ідея була - просто видаліть фрагменти i386 та x86_64 під час створення архіву, тому я змінив сценарій:

echo "Target architectures: $ARCHS"

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
echo $(lipo -info "$FRAMEWORK_EXECUTABLE_PATH")

FRAMEWORK_TMP_PATH="$FRAMEWORK_EXECUTABLE_PATH-tmp"

# remove simulator's archs if location is not simulator's directory
case "${TARGET_BUILD_DIR}" in
*"iphonesimulator")
    echo "No need to remove archs"
    ;;
*)
    if $(lipo "$FRAMEWORK_EXECUTABLE_PATH" -verify_arch "i386") ; then
    lipo -output "$FRAMEWORK_TMP_PATH" -remove "i386" "$FRAMEWORK_EXECUTABLE_PATH"
    echo "i386 architecture removed"
    rm "$FRAMEWORK_EXECUTABLE_PATH"
    mv "$FRAMEWORK_TMP_PATH" "$FRAMEWORK_EXECUTABLE_PATH"
    fi
    if $(lipo "$FRAMEWORK_EXECUTABLE_PATH" -verify_arch "x86_64") ; then
    lipo -output "$FRAMEWORK_TMP_PATH" -remove "x86_64" "$FRAMEWORK_EXECUTABLE_PATH"
    echo "x86_64 architecture removed"
    rm "$FRAMEWORK_EXECUTABLE_PATH"
    mv "$FRAMEWORK_TMP_PATH" "$FRAMEWORK_EXECUTABLE_PATH"
    fi
    ;;
esac

echo "Completed for executable $FRAMEWORK_EXECUTABLE_PATH"
echo $(lipo -info "$FRAMEWORK_EXECUTABLE_PATH")

done

Цей скрипт просто видаляє фрагменти i386 та x86_64 з бінарного жиру (якщо вони існують), якщо він не працює для симулятора (це означає, що папка призначення не схожа на "Налагоджувач-iphoneimulator").

Вибачте, я не знайомий зі скриптами оболонки, тому хтось може написати це більш елегантно. Але це працює)


1
Дякую за ідею. Я просто додав до коду чек із прийнятої відповіді всередині циклу while, case "${TARGET_BUILD_DIR}" in *"iphonesimulator") echo "Skip simulator target"; continue ;; esacі він працював як шарм.
Михайло Радіонов

Я додаю цей скрипт, TARGET -> Build Phases -> [CP] Embedded Pods Frameworksале він не працює, і я все ще завантажую в iTunesConnect помилки. Як запустити цей сценарій?
PiterPan

2
PiterPan, додайте його як окрему фазу RunScript
Varrry

1
Я просто перевірив опцію "Запустити сценарій лише при встановленні", і він пропускається, за винятком того, що тоді архівується.
Рівера

Зробив усе, що тут запропоновано, вдалося очистити помилку Карфагена; але потрібно завантажити його в App Store без перевірки, щоб отримати корисну інформацію про те, чому він не вдався. Вдалося виправити це і рухатися вперед ...
user3069232

90

Якщо ви використовуєте Carthage, то у вас може виникнути ця проблема, оскільки проект:

  • carthage copy-frameworksФаза збірки відсутня .
  • Або фаза збірки не включає всі рамки (неповний список).

Ця дія фільтрує рамки до списку дійсних архітектур (код) .

Налаштування фази збірки кадрів для копіювання

Від будівлі Карфагена для кроків iOS :

На вкладці налаштувань "Фази збірки" на вашій програмі натисніть значок "+" та виберіть "Нова фаза запуску сценарію". Створіть сценарій запуску, в якому ви вкажете свою оболонку (наприклад: bin / sh), додайте наступний вміст до області сценарію під оболонкою:

/usr/local/bin/carthage copy-frameworks

і додайте шляхи до фреймворків, які ви хочете використовувати у розділі "Вхідні файли", наприклад:

$(SRCROOT)/Carthage/Build/iOS/Box.framework $(SRCROOT)/Carthage/Build/iOS/Result.framework $(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework

Цей скрипт працює навколо помилки подання App Store, ініційованої універсальними бінарними файлами, і забезпечує необхідне копіювання необхідних файлів і dSYM, пов’язаних з бітовим кодом, при архівуванні.


В якості додаткової примітки я нещодавно зіткнувся з цією проблемою, перейшовши з використання старої, заздалегідь складеної версії стороннього фреймворку на нову версію того самого фрейму, встановленого за допомогою Carthage. Навіть коли Карфаген був повністю налаштований, я продовжував отримувати цю помилку. Для мене виправлення полягало в тому, щоб повністю видалити рамку з проекту та додати її знову. Якщо ви використовуєте Карфаген, і ця відповідь не відповідає вам, спробуйте це зробити.
Еш

1
Справді, чудовий пост. Зауважте, що найчастіше найкраще видалити всі рамки та почніть знову додавати всі ваші рамки з Карфагена. Ура
Фетті

Я використовую Карфаген і Маршала і додаю, що $(SRCROOT)/Carthage/Build/iOS/Marshal.frameworkробив свою роботу
Рікардо Мутті

в сучасному iOS 99% часу це проблема - ви просто забули копіювальні рамки. (100% проектів зараз використовують Carthage.)
Fattie

41

Я усунув помилку ITMS-90080, видаливши рамку (відмінний SVProgressHUD) з розділу Вбудовані бінарні файли (ціль Xcode -> Загальна вкладка).

введіть тут опис зображення


5
Ця відповідь повинна мати ще багато результатів. Я підозрюю, що це першопричина для багатьох людей, які використовують Карфаген.
мм2001

15
Якщо ви намагаєтеся вставити динамічний фреймворк, то видалення його призводить до цього повідомлення про помилку для мене: "Причина: зображення не знайдено"
electronix384128

1
Це працювало для мене. Вам потрібно видалити рамку із вбудованих бінарних файлів і просто додати її до пов'язаних рамок і бібліотек. Крім того, ви повинні виконати інші речі, такі як запуск сценарію, який ви знайдете в інших відповідях.
усмішкаБот

33

Якщо ви користуєтеся, Carthageпереконайтеся, що ваш номер Embed Frameworks Build StepпередCarthage copy-frameworks


У деяких незвичайних випадках (наприклад, фреймворк Lottie-iOS):

  • Ви матимете його просто у "Бібліотеці посилань", як зазвичай.

  • Однак вам також потрібно явно додати його у "Вставити рамки" (навіть якщо це здається безглуздим, оскільки він ідеально працює, коли у вас є лише у "Вбудувати рамки"),

  • і помістити його в рамки копіювання

  • і переконайтеся, що рамки копіювання є після "Embed Frameworks"


Таким чином мій випуск. Дякую.
DookieMan

15

Видаліть [x86_64, i386] з рамки, використовуючи нижній крок. [x86_64, i386] використовується для тренажера.

  1. відчинено Terminal

  2. відкрийте шлях перетягування проекту відповідної рамки до Терміналу

    приклад: cd /Users/MAC/Desktop/MyProject/Alamofire.framework

  3. встановіть своє ім'я Framework в команду нижче та запустіть

lipo -remove i386 Alamofire -o Alamofire && lipo -remove x86_64 Alamofire -o Alamofire

  1. Тепер знову відкрийте проект, очистіть, складіть і запустіть та створіть архів ...

@mahipal Singh .. після видалення за допомогою команди lipo. додаток не працює в тренажері. з'явилася помилка, як x84_64 відсутня для iphone simulator але добре працює в реальному пристрої.
Гітарт

Це тому, що симулятор підтримує лише налагоджувальні рамки
MAhipal Singh

14

Я додам сюди свої 2 копійки (менш страшним способом :-). Я зіткнувся з досить великою кількістю жирових бібліотек від постачальників, які (чомусь) не працюють нормальним способом, додаючи їх до Frameworksкаталогу, як це задокументовано Apple. Єдиний спосіб, коли нам вдалося змусити їх працювати, - це втягнути .framekworkправоруч у каталог проектів і зв’язати вручну Embedded Frameworksта Link Binary with Librariesвручну в Налаштуваннях збірки. Це, здається, спрацювало без будь-яких проблем, проте, як і будь-яка жирова бібліотека, вони поставляються із сторонніми архітектурами Simulator i386 і x86_64разом ізarm архітектурами.

Швидкий спосіб перевірити архітектуру жирової бібліотеки

$ cd 'Project_dir/Project'
$ lipo -info 'YourLibrary.framework/YourLibExec`

Що повинно виплюнути щось таке

Architectures in the fat file: YourLibrary.framework/YourLibExec are: i386 x86_64 armv7 arm64

Це підтверджує, що вам потрібно буде "обрізати жир" (а саме i386&x86_64 перед завантаженням iTunesConnect Archival ) з вашої системи, що не дозволяє цим архітектурам (оскільки вони не підтримуються для iOS).

Тепер усі відповіді (або принаймні деякі відповіді) містять ці чудові сценарії запуску, на які я впевнений, що вони справді добре працюють, але лише якщо ваша рамка знаходиться в Frameworks каталозі. Тепер, якщо ви не наркотик із сценарію оболонки, ці сценарії без модифікацій не працюватимуть за сценарієм, який я пояснюю вище. Однак існує дуже простий спосіб позбутися i386& x86_64архітектури з фреймворку.

  1. Відкрийте термінал у каталозі свого проекту.

  2. Змінюйте каталог безпосередньо на .framekwork, наприклад

    cd YourProjectDir/YourProject/YourLibrary.framework

  3. Виконайте ряд команд, як показано нижче-

$ mv YourLibrary YourLibrary_all_archs
$ lipo -remove x86_64 YourLibrary_all_archs -o YourLibrary_some_archs
$ lipo -remove i386 YourLibrary_some_archs -o YourLibrary
$ rm YourLibrary_all_archs YourLibrary_some_archs

Тут слід зауважити кілька речей - lipo -removeпотрібно зробити один раз для видалення кожної архітектури. lipoне змінює вхідний файл, він лише створює файл, тому вам доведеться запустити lipo -removeодин раз для x86_64іi386 . Наведені вище команди - це просто зробити, спочатку перейменувавши виконуваний файл, а потім зрештою видаливши потрібні арки, а потім очистивши ліві файли. І це все, тепер ви повинні побачити зелений прапорець у завантаженні додатка Archival Archival до iTunesConnect.

Необхідно пам’ятати : наведені вище кроки слід робити лише під час нарощування виробництва, оскільки .frameworkбуде позбавлено архітектури тренажеру, а на тренажерах перестануть працювати (що очікується). У середовищі розробки не повинно виникати необхідності знімати архітектуру з .frameworkфайлу, оскільки ви хочете мати можливість протестувати як на Simulator, так і на фізичному пристрої. Якщо ваша жирова бібліотека знаходиться в Frameworksпапці проекту, будь ласка, подивіться на прийняту відповідь.


Просте рішення для тих, хто не схожий на сценарій.

просто запустіть команду вище, розмір арки зменшився до половини. сподіваємось, щось змінить.
шоумірує

Хоча я розгорнув сценарій, щоб все працювало як нормально, але це має бути належним описом того, як вирішити проблему.
Шаркс Монкен

люблю природу цієї відповіді. чистий і лаконічний
Худі

10

У мене була така ж проблема навіть після додавання сценарію та оновлення рамки кілька разів.

Переконайтеся, що в xCode сценарій додається в кінці, після вставки. Я думаю, що я випадково перемістив сценарій перед вбудованою рамкою.

введіть тут опис зображення

Примітка. У мене є xCode 9.1


Це працювало для мене. Якщо сценарію просто @ pAkY88 було достатньо востаннє, я зробив реліз майже рік тому.
RedHotPawn.com

У мене був той самий випуск, і це працювало на мене. Обов’язково перевіряйте положення сценарію запуску щоразу, коли рамку видаляється та додається (необхідна лише тоді, коли був видалений лише один фреймворк).
Баран Емре

Ти врятуєш мій день. Просто додати скрипт після вбудованого фреймворку.
Mayuri R Talaviya

8

Оновлено для Xcode 10.1, нижче для мене працювало рішення:

Просто потрібно видалити рамку із вбудованих бінарних файлів і просто додати її до пов'язаних рамок і бібліотек.

Дивіться нижче скріншот;

введіть тут опис зображення


1
Робоче рішення для мене (y)
Alok

це видаляє те саме із пов'язаних рамок і бібліотек
Рану Дхурандхар

8

Завдяки всім вищезазначеним відповідям. Ось сценарій, що працює зі швидкими 4.2 та 5 . Замініть рядок your_Framework_Name оригінальним іменем вашого Framework.

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
FRAMEWORK_NAME="Your_Framework_Name.framework"
# Check if Framework is present.
FRAMEWORK_LOCATION=$(find "$APP_PATH" -name "$FRAMEWORK_NAME" -type d)
if [ -z $FRAMEWORK_LOCATION ]; then
echo "Couldn't find Your_Framework_Name.framework in $APP_PATH. Make sure 'Embed Frameworks' build phase is listed before the 'Strip Unused Architectures' build phase."
exit 1
fi
# This script strips unused architectures
find "$APP_PATH" -name "$FRAMEWORK_NAME" -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done

Дякую! Це працювало для мене, поки прийнятої відповіді не було.
besserwisser

5

Ця проблема була вирішена для мене, трохи змінивши сценарій запуску з відповіді pAky88 та виконавши після вбудовування фреймворків. Також не забудьте зняти прапорець "Запустити сценарій лише під час встановлення".

/usr/local/bin/carthage copy-frameworks

#!/usr/bin/env bash

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"

if [ ! -f "${FRAMEWORK_EXECUTABLE_PATH}" ]; then
continue
fi

if xcrun lipo -info "${FRAMEWORK_EXECUTABLE_PATH}" | grep --silent "Non-fat"; then
echo "Framework non-fat, skipping: $FRAMEWORK_EXECUTABLE_NAME"
continue
fi

echo "Thinning framework $FRAMEWORK_EXECUTABLE_NAME"

EXTRACTED_ARCHS=()

for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
xcrun lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done

echo "Merging extracted architectures: ${ARCHS}"
xcrun lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"

echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done

4

Я видалив архітектури i386 & x64_86 з "Налаштування збірки" - "Дійсні архітектури" - "Випуск", і все працювало чудово.

введіть тут опис зображення

Тепер єдиним питанням буде те, що ви не можете запустити збірку RELEASE для тестування на SIMULATOR . Але так само легко, як ви видалили арки, ви можете додати їх назад, якщо хочете.


1
ТАК, що рішення.
Офір Малачі

3

просте рішення, яке працювало для мене, було

1- видаліть рамку із вбудованих рамок.

2- додати рамку як пов'язану рамку

зроблено!


1

Ця помилка (ITMS-90240) також може бути викликана статичною (.a) бібліотекою. ось сценарій для позбавлення зайвих архітектур. У Xcode додайте це до Target> BuildPhases> Клацніть + та виберіть Run Script. Потім вставте це у вікно сценарію.

Сценарій здійснює пошук файлів .a, перевіряє, чи містить він архітектуру, яка не порушує, а потім робить новий файл .a без цієї архітектури.

Для macOS:

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
STRIPARCHS="armv7 armv7s arm64"
for t in $STRIPARCHS
do

if find "$APP_PATH" -name '*.a' -exec lipo -info {} \; | grep $t ; then
    find "$APP_PATH" -name '*.a' -exec lipo -remove $t {} -output {}2 \; -exec rm {} \; -exec mv {}2 {} \; ;
fi

done

exit 0

Для iOS:

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
STRIPARCHS="x86_64 i386"
for t in $STRIPARCHS
do

if find "$APP_PATH" -name '*.a' -exec lipo -info {} \; | grep $t ; then
    find "$APP_PATH" -name '*.a' -exec lipo -remove $t {} -output {}2 \; -exec rm {} \; -exec mv {}2 {} \; ;
fi

done

exit 0

1

У мене був такий самий випуск. Навіть він не працював після додавання заданого сценарію Run. Це було питання Xcode. Я використовував Xcode версії 9.0, але остання версія була 9.2.

Тому я встановив останній Xcode (9.2), і він працював.


0

Ваша рамка містить ARMі x86код, і код, що дозволяє використовувати її на пристрої або в тренажері. Якщо ви маєте намір подати свою програму в App Store, запустіть наступний сценарій, щоб зняти неактивний код з двійкового файлу.

1.Виберіть ціль у Навігаторі проектів та натисніть Фази збірки у верхній частині редактора проектів.

2.З меню «Редактор» виберіть «Додати фазу збірки», а потім додайте «Фаза збірки сценарію» (або натисніть кнопку + у верхньому лівому куті редактора фаз збірки).

3.Розгорніть трикутник розкриття поруч із щойно доданою новою фазою збірки сценарію Run. У поле редактора сценаріїв вставте наступне: bash

$ {BUILT_PRODUCTS_DIR} / $ {FRAMEWORKS_FOLDER_PATH} / "YourframeworkName.framework" /strip-frameworks.sh


Це передбачає, що сценарій strip-frameworks.sh трапляється там ...
Codezy

0

Ось сценарій, який я використовував, щоб спеціально видалити лише одну архітектуру рамки з виконуваного файлу.

# Remove unused Framework architecture from "YourApp" framework.

FRAMEWORK_EXECUTABLE_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}/Frameworks/YourApp.framework/YourApp"

echo "$FRAMEWORK_EXECUTABLE_PATH"

cp "$FRAMEWORK_EXECUTABLE_PATH" "${FRAMEWORK_EXECUTABLE_PATH}_X86_64"

echo "Executing following command to remove x86_64 arch from YourApp framework executable"
echo "lipo -remove x86_64 \"$FRAMEWORK_EXECUTABLE_PATH\" -o \"${FRAMEWORK_EXECUTABLE_PATH}_X86_64\""

lipo -remove x86_64 "${FRAMEWORK_EXECUTABLE_PATH}_X86_64" -o "$FRAMEWORK_EXECUTABLE_PATH"

rm "${FRAMEWORK_EXECUTABLE_PATH}_X86_64"

Додайте цей сценарій до своїх проектів "Фази побудови" своєї цільової програми. Обов’язково поставте прапорець "Запустити сценарій лише під час встановлення"

Попередній перегляд, куди потрібно вставити зразок сценарію

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.