Помилка "Немає такого модуля" за допомогою Xcode, але рамка є


344

В даний час я кодую в Swift, і у мене виникла помилка:

Немає такого модуля Social

Але я не розумію, тому що модуль є в моєму проекті, оголошений у "Пов'язаних рамках та бібліотеках" та "Вбудованих бінарних файлах".

Рамки є в Objective-C, тому я написав для неї Bridge Header.

Будь ласка, як я можу змусити Xcode розпізнавати рамки?

Модуль помилок

Проект

Посилання, рамки, бібліотеки

Верхній міст


20
Не бути занадто містер. очевидно, але ви спробували повністю очистити і скласти?
Калель Уейд

28
Якщо заголовок фреймворка вже включений до мостового файлу заголовка, то вам не доведеться імпортувати його у вихідний файл Swift.
Martin R

2
Також вам може знадобитися використовувати лапки для імпорту:#import "Social/Social.h"
Martin R

3
така ж помилка з CocoaPods "немає такої помилки модуля" у xcode.
AsimRazaKhan

1
Я змінив ціль розгортання з 11 на 10, але забув її в Podfile platform :ios, '10.0'. Це було рішення.
Артур Гусейнов

Відповіді:


321

Я не впевнений, чому це відбувається, але один із способів вирішити свою проблему - зайти в налаштування збирання та визначити рамки Шляху пошуку до папки, яка містить відповідні рамки. Якщо рамки розміщені у вашому каталозі проектів, просто встановіть шлях пошуку рамки $(SRCROOT)та встановіть його на рекурсивний.


5
Дякую. Мені довелося це робити в налаштуваннях для створення проекту, а не в налаштуваннях цільової збірки
Pulsar

8
Хитрість для мене полягала в тому, щоб знайти шлях до фреймворку, який слід використовувати в рамках Шлях пошуку в рамках. $ {TARGET_BUILD_DIR} /YourFrameworkName.framework добре працює для мене. Дивіться також stackoverflow.com/questions/32816507/…
Кріс Принс,

11
Довелося це робити Project Build Settingsзамість цього Target Build Settings.
Максим Міхеєв

378
Я це зафіксував, зайшовши у туалет. Коли я повернувся, це працювало. Я майже впевнений, що я спробував усе в цій темі, не знаю, що саме зробив. Я теж молився в якийсь момент.
nmdias

2
ПРИМІТКА ВИПУСК: $ (SRCROOT) працював на мене лише тоді, коли я додав його до Рамкового шляху пошуку ПРОЕКТУ PODS.
аддзо

549

У випадку, якщо в п’ятницю вдень або в будь-який час після 1 години ночі:

Відкриття xcodeprojзамість цього xcworkspaceпризведе до такої помилки ...


2
Я спробував це як святий грааль. Смішно. Хто знає, але вийшов із цього пункту, після повторного відкриття робочої області насправді також працював. Очистіть, потім побудуйте.
mondousage

3
21:00 за допомогою fastlane, вказав спортзал (проект: ---) замість спортзалу (робоча область: ----) Дякую!
RickiG

1
Це сталося зі мною після аварії Xcode, і я вибрав програму "повторно відкрити" зі звіту про помилку. Я краще буду знати наступного разу.
Штамп

Я перевстановив XCODE і отримав цю помилку, оскільки відкривав додаток через нещодавно відкриті проекти. Закрили проект, Файл -> Відкрити -> виберіть файл xcworkspace і все працювало.
Дпедрінья

Також стосується побудови в командному рядку (наша проблема): xcodebuild -workspace yourproject.workspace.
Бен Бутцер

57

Переконайтесь, що назва ваших конфігурацій у підпроектах відповідає тому, що відповідає "батьківському" проекту. Якщо найменування конфігурації не збігаються точно (з урахуванням регістру), Xcode скасує процес архіву та покаже помилку "Немає такого модуля ..."

Тобто, якщо у вас є "батьківський" проект з конфігурацією під назвою "AppStore", ви повинні переконатися, що всі підпроекти також мають це ім'я конфігурації.

Дивіться мої додані скріншоти.

Налаштування конфігурації в "батьківському" проекті

Налаштування конфігурації в 1-му підпроекті

Налаштування конфігурації у другому підпроекті


1
У моєму випадку, підпроект мав тільки Debugі Distributionй його батьківський проект намагається побудувати для Release. Рішенням було зробити копію Distributionв дочірньому проекті та перейменувати її Release.
olivaresF

2
Це призвело до того, що я знайшов проблему, але я вирішив її, додавши до рамкових шляхів пошуку в моїх спеціальних конфігураціях, оскільки я не хотів торкатися підпроекту сторонньої сторони :)
DeFrenZ

Дякую! У мене в основному проекті було 3 конфігурації. Отже, я зробив те саме для фреймворку, і це допомогло.
daxh

Будь-які підказки про те, як змусити Xcode будувати конкретну конфігурацію вкладеного підпроекту? Не хочу перейменувати підпроектів конфіги, як він стає занадто пов'язаний додавання нових конфігов в основний проект
DREN

Це працювало для мене, оскільки мій проект мав 3 конфігурації, які були перейменовані у конфігурації "Налагодження" та "Випуск" за замовчуванням. Я оновив свою рамку, щоб мати ті самі 3 конфігурації, побудував рамку і все працювало так, як очікувалося.
Юрій

44

Я не зовсім впевнений, чому відповідь Мартіна Р в коментарях до питання так не враховується:

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

Сподіваюсь, це допомагає


38

У мене був той самий випуск, використовуючи Cocoapods та Swift . У підфілі я не помітив наступних рядків:

# Uncomment this line if you're using Swift
# use_frameworks!

Отже, все, що я повинен був зробити, це змінити його на:

# Uncomment this line if you're using Swift
use_frameworks!

... і це спрацювало :)


Так, для мене use_frameworks навіть не було в моєму підфілі, тому я додав його
PhoenixB


18

Я також відчував цю проблему. Для мене виправлено те, що схеми архіву між двома проектами не збігалися. У мене є xcworkspace з рамковим проектом та проектом для додатків. Проблема полягала в тому, що в схемі «Архів» для мого додатка я використовував іншу конфігурацію збірки, ніж рамки, що використовуються для її схеми «Архів». Я встановив обидві конфігурації побудови для випуску, і це вирішило проблему.


Це працювало для мене. Я встановив свій головний проект Build Config назад до Release (з дистрибуції), і тепер він відповідає підпроекту. Всі працюють. Дякую!
Чарлі Селігман

1
У нашій рамці не було конфігурації AdHoc, яку ми використовували для проекту - це означає, що він не створювався разом із проектом.
Йохан

15

Наступні кроки працювали для мене.

  1. Закрити xcode
  2. Запустити "pod update"в терміналі
  3. Відкрийте .xcworkspaceі побудуйте заново.

1
Ці кроки працювали для мене ... Дякую ... Я запустив "Pod install", але не отримував "Модуль XXX не знайдений ..", але після виходу з XCode та повторного відкриття робочої області мені допоміг ..
Aks

Моя проблема полягає в тому, що після додавання нової конфігурації збірки та схеми я отримав "Модуль не знайдений ..." Завершити Xcode не працює, після того, як pod installвін працює.
Вільям Ху

Це працювало для мене. Будь-яке пояснення, чому це вирішує проблему?
Ніко Чернек

Це працювало для мене. Після повторного відкриття projectname.xcworkspace потрібно очистити та відновити його знову, щоб він працював.
Прашант

14

У моєму випадку, після багатьох спроб з'ясувати, що я роблю неправильно, імпортуючи рамку, я врешті-решт виявив, що сама проблема є проблемою. Якщо ви не отримуєте рамку з надійного джерела, слід ознайомитись з фреймворком та переконатися, що він містить папку Modules з файлом module.modulemap. Якщо module.modulemap немає, ви отримаєте помилку "Немає такого модуля" MyFramework "".

Приклад показує структуру каталогів SwiftyJSON.framework

Якщо в папці Модулі відсутня папка "MyFramework.swiftmodule", тоді буде знайдено рамку, але Xcode не дізнається про її вміст, тому ви отримаєте різні помилки.


2
Чомусь це не відображається в xcode 9.1, навіть якщо він присутній. Клацніть правою кнопкою миші на рамці> Показати в Finder> і переконайтеся, що ваша карта модулів є. Якщо ви використовуєте ручний фреймворк у проекті стручків, відновіть свої стручки, якщо ви тільки що додали нову структуру вручну або оновили існуючу.
Крістофер Ларсен

1
Дякую! Я створив файл сам, і він спрацював: рамковий модуль NAME {заголовок парасольки "NAME.h" експорт * модуль * {export *}}
Sjoerd Perfors

12

Якщо припустити, що Рамка дійсно є і на шляху, і т.д. ... видаліть каталог ~ / Бібліотека / Розробник / Xcode / DerivedData / ModuleCache (і очистіть проект та видаліть похідні дані, специфічні для проекту, для гарного виміру).

Коли ви робите стандартне очищення, каталог ModuleCache не буде відновлено.


1
Я щойно зробив це, як ви мені сказали, і це не працює: /
alexandresecanove

1
Тоді ви можете зіткнутися з іншою проблемою, яка виглядала так само, як та, з якою я стикався. : - /
Бред Брайтон

У мене була та сама проблема з Cocoapod, а видалення файлів у ModuleCache зробило для мене трюк.
HolySamosa

10

Що для мене спрацювало - це рішення іншого питання. Закриття Xcode та повторне відкриття проекту як робочої області.
Перейдіть до папки проекту та відкрийте .xcodeworkspace файл.
Після відкриття робочої області (замість проекту) Pods повинні відображатися як проект верхнього рівня в Project Navigator.


9

Будьте впевнені, що Find implicit Dependenciesпараметр Build в Scheme увімкнено!


7

Я також зіткнувся з тією ж помилкою кілька днів тому. Ось як я вирішив проблему:

Помилка "модуль не знайдено"

  • Створіть Podfile у вашому каталозі кореневих проектів
  • Встановити cocoapods (менеджер залежностей для проектів Swift та iOS)
  • Запустіть установку pod
  • Перейдіть до налаштувань збірки проекту:

    • Знайдіть об'єктивний заголовок Objective-c під компілятором Swift - Генерація коду (Якщо ви не знайдете компілятора Swift тут, ймовірно, додайте новий файл Swift до проекту)
    • Перетягніть файл заголовка бібліотеки з лівої сторони до мостового заголовка (див. Зображення, що додається)введіть тут опис зображення
  • Створіть новий заголовочний файл заголовка: напр. TestProject-Bridging-Header.h та поставте під компілятор Swift → Назва заголовка інтерфейсу, створений об'єктивом-C (див. Зображення, див. Зображення)

  • У файл TestProject-Bridging-Header.h напишіть #import "Mixpanel / Mixpanel.h"
  • У вашому файлі Swift код повинен бути: Імпорт Mixpanel (тобто ім'я бібліотеки)

Це все.


Ця відповідь допомогла. Намагаючись налаштувати його на MBProgress, я в кінцевому підсумку дотримувався вказівок на ios-support.blogspot.com/2017/04/… , що було дуже схожим.
Vette

6

Гаразд, як та сама проблема була вирішена для мене, це встановити розташування отриманих даних відносно каталогу робочої області, а не тримати його за замовчуванням. Перейдіть до налаштувань у xcode. Перейдіть на вкладку "Місцеположення" у налаштуваннях та встановіть Отримані дані на "Відносні". Сподіваюся, це допомагає.


Він працював лише один раз, тоді, коли я запускаю, переходить до тієї ж проблеми, що не знайти модуль.
nycdanie

5

Я отримував таку ж помилку для

import Firebase

Але потім зауважив, що я не додавав стручок до основного цільового розділу, а лише додав до цілей Test та TestUI у Podfile.

З командою

pod init

для швидкого проекту xcode створюється наступний Podfile

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'MyApp' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for MyApp

  target 'MyAppTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'MyAppUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

Отже, потрібно переконатися, що кожен додає стручки до будь-якого відповідного заповнювача.


5

Якщо ви будуєте для такої платформи, як tvOS, переконайтеся, що у вас вибрано тренажер Apple TV (тобто відповідний).

Створення програми tvOS із вибраним імітатором iOS призвело до саме цієї помилки. Витратили більшу частину години на пошуки всіляких проблем побудови ... да.


1
Те саме стосується, якщо ви вибираєте "Мій Mac" під час створення проекту iOS. Я не знаю, чому Xcode навіть дозволяє це ... 😒
Клаас,

Дякую! Зараз так очевидно, але помилка змусила мене шукати більш складні рішення!
Ден Мессінг

5

У моєму випадку додаток IPHONEOS_DEPLOYMENT_TARGET було встановлено на 9,3, тоді як у моєму новоствореному рамках було встановлено 10,2

Розв’язник неявних залежностей ігнорував мій новий фреймворк, оскільки вимоги цільової платформи вищі, ніж вимоги програми.

Після коригування рамкової цілі розгортання iOS відповідно до цілі мого розгортання програми рамки успішно складені та пов'язані.


Дякую. Затративши кілька годин, я виявив, що ціль розгортання була проблемою.
niks

4

Я отримував таку ж помилку, як і додав пару фреймів за допомогою Cocoapods. Якщо ми використовуємо Pods у своєму проекті, ми повинні використовувати їх xcodeworkspaceзамість xcodeproject. Щоб запустити проект через xcodebuild, я додав -workspace <workspacename>параметр у xcodebuildкоманді, і він прекрасно працював.


Якщо у вас є НОВЕ запитання, поставте його, натиснувши кнопку Задати питання . Якщо у вас є достатня репутація, ви можете підтримати це питання. Крім того, "позначайте" це зірочкою як улюбленого, і вам буде повідомлено про всі нові відповіді.
Алессандро Каттін

@pawan singh, ти зберег для мене кілька годин, дякую!
Дмитро Сенькович

3

Я виявив, що Import Pathsв Build Settingsневідомому для користувальницького (MySQL) модуля. Після вказівки, що в потрібному напрямку повідомлення не було.


@rplankenhorn Ну, просто там, де ви поставили їх на свою машину. Виконати, findякщо ви цього не знаєте.
qwerty_so

3

Я зафіксував це за допомогою

Цілі -> Загальні -> Зв'язані рамки та бібліотеки

Додайте рамку, яка повинна бути вгорі в Workspaceпапці. Біль у попі.


3

Я щойно видалив свій какаоп. Потім я зробив встановлення стручка, щоб видалити його. Потім я просто додав його назад до свого підфілю та знову встановив його. Це змусило його працювати. Не знаю чому.


3

У мене вже були встановлені стручки. Під час створення програми на своєму пристрої збірка працювала без проблем, але архів не працював. Я просто біжу:

pod install

не було встановлено нових стручок, просто .xcodeproj файл відновився і архів почав працювати


3

У Xcode 10.1 рішенням для мене було змінити систему збирання в налаштуваннях робочої області в меню Файл. За замовчуванням встановлено New Build System , змінив його на Legacy Build System і це зробило трюк.

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


Дякую тобі, приятелю, ти врятував мені день! +1
DungeonDev

3

Існує кілька можливих неправильних налаштувань, до яких може виникнути проблема,

  1. Підтвердьте, що ви відкрили, .xcworkspaceале не .xcodeprojфайл. Також переконайтеся, що ви спочатку побудували, Socialперш ніж будувати TriviaApp.
  2. Переконайтеся, що ціль розгортання iOS встановлена ​​однаково для всіх модулів з основним додатком. Для прикладу TriviaAppїв цільового розгортання встановлений 9.0, Social˙s цільової розгортання також повинні бути встановлені в 9.0.
  3. Переконайтесь, що ваш основний модуль ( TriviaApp) та використовуваний фреймворк ( Social) мають однаковий набір конфігурацій. тобто , якщо ваш проект має три конфігурації, Debug, Release, ReleasePremiumніж ваші соціальні структури також має мати три конфігурації Debug, Release, ReleasePremium. Також переконайтесь, що конфігурація архіву встановлена ​​однаково для обох TriviaAppта Social. тобто якщо для вашої TriviaAppсхеми архіву встановлено ReleasePremium, Socialтакож слід встановити схему архіву s ReleasePremium.
  4. Будь ласка, переконайтесь, що вам не потрібно імпортувати Socialв кожен .swiftфайл, коли його вже додано у Bridging-Header.h.
  5. У разі випуску прийшло з Pod файлів, переконайтеся , що ви Розкоментувати #use_frameworks!в use_frameworks!від вас Podfile. Інколи встановлення стручка працює, якщо Socialє залежність від стручків.
  6. Якщо жоден з перерахованих вище кроків не працює, видаліть отриману папку даних і спробуйте знову створити.

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

@lulian рада знати, що це допомогло
Sazzad Hissain Khan

2

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

$(PROJECT_DIR)/Carthage/Build/iOS

Якщо ви запустите carthage update --platform ios --no-build(щоб заощадити час), файли всередині папки Build не будуть відновлені, модулі не будуть доступні для XCode.

У моєму випадку я бігав carthage update --platform ios, тоді моя проблема була вирішена.


2

Загалом => Пов'язані рамки та бібліотеки, я додав своє, ./Pods/Pods.xcodeprojі це зробило трюк


2

Для мене лише для Active Active Architecture було вибрано Так для вибраної конфігурації. Це зробило трюк:

Виберіть "Pods" у лівому навігаторі проектів> Виберіть "Settings settings"> Build Active Architecture Only to No


1

Якщо всі перераховані вище методи не спрацювали для вас, як у моєму випадку. Попереднього дня проблем не було, але наступного ранку я зіткнувся з тією ж помилкою. Я просто видалив рамки, видаливши посилання і знову додав їх. Я знаю, це може звучати нерозумно, але вуаля це спрацювало.


1

У мене була схожа проблема із завантаженням FacebookSDK, я додав ~ / Документи / FacebookSDK (шукаю, де є ваші рамки) до шляхів пошуку Framework в налаштуваннях збірки, і після цього мені вдалося імпортувати модуль FBSDKShareKit.


1

Для чого це варто (я новачок у цьому за допомогою Xcode 7.2 / Swift 2), але я помітив, що лише наявність .swift-файлу з бібліотеки в каталозі проекту автоматично надає вам доступ до нього і не потребує використання оператора.

Приклад: я використовую SwiftyJSON і просто маю файл SwiftyJSON.swift у проекті все, що мені було потрібно. usingЗаява була на самому справі дає мені помилку «немає такого модуля» і виймаючи його вирішити, і це працює відмінно.

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