Не удалось создать пользовательскую структуру с помощью Swift 4.1.

Я пытался решить эта проблема. Поэтому я подумал о создании нового простого нового фреймворка на Swift 4.1.

Мой код таков:

public class TestStupidity: NSObject {
    public static var shared = TestStupidity()
    public func hello() {
        print("hello")
    }
}

Однако даже этот небольшой фрагмент кода у меня не работает. Открытый класс и его переменные не отображаются в файлах заголовков.

Я загрузил этот проект на GitHub по ссылка.

Может ли кто-нибудь помочь мне понять, что я здесь делаю неправильно?


person Amogh Shettigar    schedule 19.04.2018    source источник
comment
Как вы включаете свою структуру в свое приложение?   -  person Ethenyl    schedule 19.04.2018
comment
import TestingStupidity. Я могу импортировать фреймворк, но в нем нет ничего, кроме TestingStupidityVersionNumber   -  person Amogh Shettigar    schedule 19.04.2018
comment
Я также добавил его во встроенные фреймворки.   -  person Amogh Shettigar    schedule 19.04.2018
comment
Вы также включили его в раздел Целевые зависимости?   -  person Ethenyl    schedule 19.04.2018
comment
зачем мне это делать? Я думал, что добавления его во встроенные фреймворки было достаточно, поскольку он не является частью моего приложения и не находится в той же рабочей области.   -  person Amogh Shettigar    schedule 19.04.2018
comment
Я предположил, что это было в той же Workspace, моя ошибка. Значит, вы просто встраиваете файл TestingStupidity.framework непосредственно из папки сборки другого проекта Framework?   -  person Ethenyl    schedule 19.04.2018
comment
Да все верно   -  person Amogh Shettigar    schedule 19.04.2018


Ответы (2)


Выполните следующие шаги и убедитесь, что все работает нормально:

Создайте новый проект типа Cocoa Touch Framework, назовите его Tester

Добавьте новый файл Swift с именем TestStupidity.swift.

Добавьте код из вашего вопроса в файл:

public class TestStupidity: NSObject {
    public static var shared = TestStupidity()
    public func hello() {
        print("hello")
    }
}

Добавьте новую цель в проект типа Single View App и назовите ее TesterApp

Выберите цель TestApp и на вкладке «Общие» щелкните знак «+» для встроенных двоичных файлов. Выберите платформу тестера

В файле ViewController.swift установите следующий код:

import UIKit
import Tester

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let testClass = TestStupidity()
        testClass.hello()
    }
}

Запустите TestApp и увидите на выходе «hello».

person Aaron Bratcher    schedule 19.04.2018
comment
Этот код работал для меня спасибо. Но есть ли способ, с помощью которого я могу сохранить отдельное рабочее пространство как для своей платформы, так и для приложения, поскольку оно работает в Swift 3, и я хотел бы сохранить его таким образом? - person Amogh Shettigar; 20.04.2018
comment
Я упомянул свою основную проблему в другом вопросе здесь - person Amogh Shettigar; 20.04.2018
comment
@AmoghShettigar, вы постоянно упоминаете заголовочный файл. Следуя моим шагам выше, можете ли вы направить меня к заголовку, о котором вы говорите? Возможно, проблема не в том, что вы думаете. - person Aaron Bratcher; 20.04.2018
comment
@AmoghShettigar, если вы хотите, чтобы он работал и в Swift 3, это совершенно другая ситуация. На данный момент фреймворк и родительское приложение должны быть скомпилированы с одной и той же версией Swift. См. обсуждение здесь: stackoverflow. ком/вопросы/49922008/ - person Aaron Bratcher; 20.04.2018

  1. Используйте ключевое слово open: класс open доступен и подклассируется за пределами определяющего модуля. Открытый член класса доступен и может быть переопределен за пределами определяющего модуля. Также добавьте @objcMembers

    @objcMembers открывает класс ARCompactDeviceInfo: NSObject {}

  2. Перейдите в Target -> Build Phase -> Headers и добавьте файл заголовка Umbrella (файл с тем же именем, что и у проекта) в Public, как показано на рисунке. Как и в моем проекте, у меня есть CryptoAPI.h и остальные файлы, скрывающие Пример Swift 4 Framework. введите здесь описание изображения

  3. Перейдите в Target -> General -> Embedded Binaries, перетащите свой фреймворк. введите здесь описание изображения

ОТРЕДАКТИРОВАНО: @Amogh Shetigar: я скачал ваш проект и интегрировал его с образцом приложения после добавления вышеуказанных деталей. Вот URL как для Framework, так и для интегрированного приложения

person Aleem    schedule 19.04.2018
comment
Я попробовал упомянутые вами изменения. Но класс по-прежнему не виден после того, как я импортирую его в свое быстрое приложение. - person Amogh Shettigar; 19.04.2018
comment
Public достаточно, чтобы использовать класс. - person Aaron Bratcher; 19.04.2018
comment
@AmoghShettigar Проверьте мой обновленный ответ. 3-й пункт поможет вам. Если работает, пожалуйста, примите и проголосуйте - person Aleem; 19.04.2018
comment
@Aleem добавление файла в общедоступные заголовки будет означать, что весь файл вместе с кодом будет добавлен в файл .framework. Я хотел бы скрыть свою реализацию - person Amogh Shettigar; 20.04.2018
comment
@AmoghShettigar Да, это правда, если вы беспокоитесь о конфиденциальности, добавьте только файл заголовка зонтика в Public, а остальную часть файла добавьте в проект. Я также обновил свой ответ соответственно. - person Aleem; 20.04.2018
comment
@Aleem, это все еще не отображается в моем заголовочном файле. Я загрузил код здесь. Не могли бы вы взглянуть? - person Amogh Shettigar; 20.04.2018
comment
Хорошо позвольте мне проверить - person Aleem; 20.04.2018
comment
Проверьте мой ответ, в разделе «Отредактировано» я практически реализую вашу проблему. Теперь я надеюсь, что это решит вашу проблему. - person Aleem; 20.04.2018
comment
@Aleem Я очень ценю вашу помощь, но я пытаюсь разработать приложение в Swift4, импорт в приложение Objc работает, но если я создам ту же структуру и добавлю в приложение Swift 4, это не сработает. - person Amogh Shettigar; 20.04.2018
comment
@AmoghShettigar, если вы пытаетесь создать бинарный файл фреймворка, который будет распространяться, посмотрите здесь несколько замечательных инструкций: eladnava.com/ Также см. мой комментарий в другом ответе о заголовочном файле - person Aaron Bratcher; 20.04.2018