【问题标题】:Objective-C Frameworks Visibility of ClassesObjective-C 框架类的可见性
【发布时间】:2018-02-23 15:26:43
【问题描述】:

在我的 iOS 应用程序中,我有不同的框架目标(工具包、数据、实体)以及以下(预期的)依赖关系图:

App -> Kit
Data -> Kit
Data -> Entity
Kit -> Entity

在应用程序目标配置中,我没有链接到 Entity,但仍然可以从 App 类中的实体导入类:

#import <Entity/Entity.h>

如何防止我在应用目标中使用Entity 类?

【问题讨论】:

    标签: ios objective-c frameworks


    【解决方案1】:

    您可以创建在每次编译时运行的自定义脚本。 (构建阶段)

    此脚本可以递归检查您是否在文件中包含此文本

    #import <Entity/Entity.h>
    

    而且它也会产生编译错误。

    从这里开始:

    转到您的项目->目标->构建阶段->“+”

    TAGS="Entity/Entity"
    echo "searching ${SRCROOT} for ${TAGS}"
    find "${SRCROOT}" \( -name "*.*" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ error: \$1/"
    

    (此脚本需要根据您的情况进行一些调整)

    Some example

    【讨论】:

    • 谢谢。这个解决方案可以工作,但感觉像是我期望编译器/链接器应该做的工作的解决方法。
    • 据我所知,这不能在该技术的编译器水平上完成。编译规则“已经设置”/预定义,也许它们支持为这些场景添加的一些自定义功能,但我不认为编译器的工作是了解你的代码应该或不应该使用什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多