Skip to content

Не компилируется с версией 6.5.0 #124

Open
alexhtn opened this issue Dec 25, 2021 · 10 comments
Open

Не компилируется с версией 6.5.0 #124

alexhtn opened this issue Dec 25, 2021 · 10 comments

Comments

@alexhtn
Copy link

alexhtn commented Dec 25, 2021

(lldb) dyld: symbol '_$s15FunctionalSwift12PromiseErrorO6cancelyA2CmFWC' not found, expected in '/private/var/containers/Bundle/Application/1EC134F4-443C-4664-837A-5859AC7F4DBA/Runner.app/Frameworks/FunctionalSwift.framework/FunctionalSwift', needed by '/private/var/containers/Bundle/Application/1EC134F4-443C-4664-837A-5859AC7F4DBA/Runner.app/Frameworks/MoneyAuth.framework/MoneyAuth'
* thread #1, stop reason = EXC_BAD_ACCESS (code=1, address=0x109dd4310)
    frame #0: 0x0000000104d255c4 dyld`strlen + 4
dyld`strlen:
->  0x104d255c4 <+4>:  ldr    q0, [x1]
    0x104d255c8 <+8>:  adr    x3, #-0xc8                ; ___lldb_unnamed_symbol35$$dyld
    0x104d255cc <+12>: ldr    q2, [x3], #0x10
    0x104d255d0 <+16>: and    x2, x0, #0xf
@starxor
Copy link
Contributor

starxor commented Jan 11, 2022

Здравствуйте.
В следствии технической ошибки граф зависимостей cocoapods нарушился наш граф приватных зависимостей. Это приводило к тому что при установке версии 6.4.0 и старше устанавливались неправильные версии внутренних зависимостей, что в свою очередь приводило к более серьёзным проблемам при сборке в последних версиях xcode. Были внесены необходимые исправления включающие исправление и изменение podspec файлов на которые раньше ссылались. Эти изменения инвалидируют текущие локальные изображения подспек репозиториев у пользователей. Для решения проблемы необходимо удалить локальные изображения поспек репозиториев в папке ~/.cocoapods/repos и переустановить зависимости. При необходимости удалить Podfile.lock.
В результате версия 6.5.0 удалена. версии 6.4.0 и 6.6.0 являются рабочими.

набор команд который исправляет установку зависимостей обычно выглядит так

rm -rf ~/.cocoapods/repos
rm -rf Podfile.lock
pod install --repo-update

в редких случаях может потребоваться pod deintegrate перед pod install

При сложностях с установкой по тэгу, можно воспользоваться опцией установки по коммиту
6.4.0 commit sha: 5a97118
6.6.0 commit sha: c2155a8

т.е. необходимо изменить в Podfile

pod 'YooKassaPayments',
:git => 'https://github.com/yoomoney/yookassa-payments-swift.git',
:tag => '6.4.0'

  на

pod 'YooKassaPayments',
:git => 'https://github.com/yoomoney/yookassa-payments-swift.git',
:commit => '5a9711873040ada0ed19b293896fee395ed68fb1'

Приносим извинения за доставленные неудобства.


Hello.
We found that internal technical error leaded to a pod spec version tree corruption. The specs have been intentionally modified to fix runtime crash problems that were present for both 6.6.0 & 6.4.0 versions compiled with new versions of Xcode.

Having that the specs were modified and current tags point to new commits, the local cocoapods spec cache is no longer valid.

Deleting cache, Podfile.lock & new install pods should resolve the problem.

rm -rf ~/.cocoapods/repos
rm -rf Podfile.lock
pod install --repo-update

pod deintegrate before pod install could help but as we see is not required in most cases.

the other temporary option is to make cocoapods point to a commit instead of tag in podfile
so instead of having

pod 'YooKassaPayments',
:git => 'https://github.com/yoomoney/yookassa-payments-swift.git',
:tag => '6.4.0'

one can go
pod 'YooKassaPayments',
:git => 'https://github.com/yoomoney/yookassa-payments-swift.git',
:commit => '5a9711873040ada0ed19b293896fee395ed68fb1'

We sincerely apologize for the inconvenience caused.

@alexhtn
Copy link
Author

alexhtn commented Jan 11, 2022

С версией 6.4.0 после выполнения этих действий я получаю ошибку
error: using bridging headers with module interfaces is unsupported
Command CompileSwiftSources failed with a nonzero exit code

@starxor
Copy link
Contributor

starxor commented Jan 11, 2022

Могу предположить что это связано с зависимостью CardIO или какой либо другой objective-c библиотекой подключаемой через bridging header. Мы думаем что эта проблема связана не только c зависимостями устанавливаемы через cocoapods, но и вообще с одновременным использованием любого xcframework одновременно с библиотеками подключаемыми через bridging header. Похоже что это новая парадигма использования зависимостей. Мы исследуем варианты настроек в cocoapods, но пока не добились успеха ни с use_modular_headers! для отдельного таргета или глобально, ни с :modular_headers => true для конкретной зависимости.

Мы готовим пример подключения CardIO как development pod c использованием .modulemap что должно решать эту ошибку. Пример добавим в код экзампла.
Другой обозримый вариант для сторонних objective-c библиотек, старых или давно не поддерживаемых, которые не включают modulemap для подключения в проекты, является по всей видимости – локальная ручная сборка в framework и подключение напрямую в проект.

NB: Есть информация что явная установка BUILD_LIBRARY_FOR_DISTRIBUTION = NO для зависимостей помогает решить эту проблему. также убедитесь что в Podfile добавлено
source 'https://github.com/yoomoney/cocoa-pod-specs.git'

source 'https://github.com/yoomoney-tech/cocoa-pod-specs.git' следует удалить и всё что будет всплывать связаное с yoomoney-tech можно удалять, так как https://github.com/yoomoney-tech/ более не существует.

@alexhtn
Copy link
Author

alexhtn commented Jan 11, 2022

Насколько я понимаю, что сейчас Apple рекомендует использовать BUILD_LIBRARY_FOR_DISTRIBUTION=YES, и оно работало с этой настройкой в старых версиях. Cейчас вы сделали обновление, в котором предлагаете использовать устаревший вариант настройки BUILD_LIBRARY_FOR_DISTRIBUTION=NO? Зачем нужно такое обновление?

@alexhtn
Copy link
Author

alexhtn commented Jan 11, 2022

Про какие устаревшие библиотеки вы говорите, если версия 6.2.0 успешно собирается? Вы в новые версии добавили какие-то устаревшие библиотеки?

@starxor
Copy link
Contributor

starxor commented Jan 12, 2022

Насколько я понимаю, что сейчас Apple рекомендует использовать BUILD_LIBRARY_FOR_DISTRIBUTION=YES, и оно работало с этой настройкой в старых версиях. Cейчас вы сделали обновление, в котором предлагаете использовать устаревший вариант настройки BUILD_LIBRARY_FOR_DISTRIBUTION=NO? Зачем нужно такое обновление?

BUILD_LIBRARY_FOR_DISTRIBUTION=YES эта настройка включает library evolution и необходимая для сборки xcframework, в тандеме с настройкой SKIP_INSTALL=NO. Эта настройка для зависимостей подключаемых через cocoapods очевидно приводит к конфликту подключения objc библиотек, также подключаемых через cocoapods которые и которые в итоге в приложение необходимо подключать через bridging-header.

@alexhtn
Copy link
Author

alexhtn commented Jan 12, 2022

Вы написали какой-то текст, но не ответы на мои вопросы.

@starxor
Copy link
Contributor

starxor commented Jan 18, 2022

BUILD_LIBRARY_FOR_DISTRIBUTION не является рекомендованной настройкой. Из спеки вызывавшей проблемы мы её убрали. Для cocapods настройка не имеет смысла в принципе, хотя вызывает упомянутую ошибку. Несмотря на это у части пользователей с Xcode 13, упомянутая ошибка не пропадает независимо от настроек. В этом случае мы не видим другого варианта кроме как отказаться от использования bridging header. На этой неделе мы добавим в экземпл приложение пример подключения библиотеки CardIO который не требует bridging header. Факт того что предыдущие версии библиотеки собираются, в данном случае не имеет отношения к вопросу, к найденым и исправленным проблемам. Также отметим что здесь на гитхаб мы не можем помочь ответом на срочные вопросы. По срочным вопросам просим вас обращаться в нашу службу поддержки.

@alexhtn
Copy link
Author

alexhtn commented Jan 18, 2022

  1. Я не использую CardIO, т.е. сейчас у меня должно собираться и без BUILD_LIBRARY_FOR_DISTRIBUTION=NO ?
  2. Как я смотрю, скорость вашей работы не особо зависит от канала обращения (github или тех. поддержка), только на гитхабе остальные разработчики ваших клиентов могут почитать о проблеме и сэкономить свое время, а в тех. поддержке мне нужно сначала написать определенное количество бесполезных писем, пока кто-то реально начнет смотреть проблему, не писать о чистке кэша. Единственное, что кое-как действует, это обращаться через своего менеджера.

@starxor
Copy link
Contributor

starxor commented Jan 19, 2022

Ошибка:

error: using bridging headers with module interfaces is unsupported
Command CompileSwiftSources failed with a nonzero exit code

Говорит о том что в проекте существует bridging header. Конкретно в build settings таргета проставлен какой-либо путь в настройку SWIFT_OBJC_BRIDGING_HEADER указывающий на соответствующий bridging header файл. Он может быть пустым или в нём могут быть объявлены другие заголовочные файлы которые вы хотите чтобы были видны в swift окружении. Для решения проблемы подключите obj-c / c / c++ код другим способом. Например через подпроект фреймворка или swift package и удалите настройку SWIFT_OBJC_BRIDGING_HEADER.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Development

No branches or pull requests

2 participants