代码之家  ›  专栏  ›  技术社区  ›  Nitish

“MyClass”不可用:找不到此类的Swift声明-模拟器

  •  4
  • Nitish  · 技术社区  · 6 年前

    我有我的框架,我支持不同的架构。为了支持我正在使用的模拟器 x86?64 在里面 有效的体系结构 .


    enter image description here

    模拟器

    “MyClass(In framework)”不可用:找不到Swift声明 对于这个班

    注意 :在设备上工作正常。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Community CDub    5 年前

    如果内存合适的话,因为第6版Xcode不支持所谓的“通用”框架(包含 arm -家庭和 x86_64 / i386) . 所以现在当你构建一个框架时,Xcode将为iphoneos和iphonesimulator生成两个单独的包(您可以在派生数据文件夹中的相应文件夹下找到它们)。这些框架将包含的体系结构取决于 ARCHS $ARCHS_STANDARD x86?64 -家庭架构被认为是不兼容的)。

    为了克服这个限制,您实际上必须自己做一点“艰苦的工作”,并手动“合并”模拟器和设备的框架包。

    1为iOS设备和模拟器构建框架

    仅构建活动体系结构 ONLY_ACTIVE_ARCH )设置为 NO 有效的体系结构 "( VALID_ARCHS

    Build settings

    现在构建您的框架,在Xcode中找到产品组下的bundle文件,并在Finder中打开它:

    Open build folder

    Build folder

    2将两个框架合并为一个

    现在进入 Debug-iphoneos

    Framework in parent folder

    它将在短时间内包含我们的通用框架。为此,我们首先需要使用 lipo 工具。打开terminal,导航到您现在所在的文件夹(使用复制的框架文件),然后键入以下内容:

    $ lipo -create -output 'MyFramework' 'Debug-iphoneos/MyFramework.framework/MyFramework' 'Debug-iphonesimulators/MyFramework.framework/MyFramework'
    

    你的框架很可能在一个文件夹下有架构切片,比如 MyFramework.framework/Modules/MyFramework.swiftmodule . 我们的通用框架应该为所有支持的体系结构提供切片。你应该已经有了 切片,因为我们从 文件夹,所以只需为 Debug-iphonesimulator 并将文件从文件夹复制到目标框架的文件夹。您现在应该将此文件夹设置为如下所示:

    Framework slices

    就这样!现在,您已经有了一个通用框架,可以在iOS模拟器和iOS设备上正常工作。

    三。在提交到Appstore时切分你的框架

    automatically rejected 利波 :

    $lipo -extract 'arm' 'MyFramework.framework/MyFramework' -output 'MyFramework-arm'
    $lipo -extract 'arm64' 'MyFramework.framework/MyFramework' -output 'MyFramework-arm64'
    $lipo -create -output 'MyFramework' 'MyFramework-arm' 'MyFramework-arm64'
    

    然后将其复制到您的框架中并删除多余的切片。

    附笔。

    Here

        2
  •  0
  •   dive    6 年前

    我看到两种可能的选择:

    1. 你的设备和模拟器使用不同的iOS版本,你的框架使用的是最新的iOS版本(另外,我看到你的选项“buildactivearchitecture only”切换为“No”)。试着把它切换回“是”并做一个干净的构建。编译器可能会发现问题,但这取决于如何将框架链接到应用程序)。;
    2. 你的 framework 为特定设备而构建。尝试切换到“framework”目标,将build的目标切换到“Generic iOS device”,并为“framework”和应用程序生成干净的内部版本。