【问题标题】:How to enable 3D touch(static quick actions) only in debug mode?如何仅在调试模式下启用 3D 触摸(静态快速操作)?
【发布时间】:2019-12-11 19:32:12
【问题描述】:

我们的团队正在开发一个应用程序,我想添加一些主屏幕快速操作,仅用于调试目的。此外,我希望在全新安装后立即启用它,这意味着动态快速操作将不是一个选项。但是,我不知道我们是否只能在调试模式下启用静态快速操作。有什么方法可以实现吗?

【问题讨论】:

  • 您可以使用运行脚本。
  • 可能不允许使用评论说这是一个很酷的想法,但我还是会这样做:这是一个很酷的想法。
  • @matt 好的,我将其扩展为答案。
  • @MojtabaHosseini 酷,谢谢!不幸的是,您只是使用运行脚本来执行我已经建议的相同操作:您正在更改哪个文件是当前的 Info.plist。这可以在没有运行脚本的情况下完成。我希望您使用运行脚本来更改 Info.plistcontents

标签: ios xcode shell plist info-plist


【解决方案1】:

很明显,问题在于您要求 Info.plist 中的条目出现在调试配置中,而不是在发布配置中出现。 Info.plist 的内容不会根据配置自动来去去去。但是 what 文件用作 Info.plist可以 根据配置更改的,因为它只是一个构建设置。所以解决这个问题的一种方法是一个特殊的配置和一个特殊的 Info.plist 来配合它。

【讨论】:

    【解决方案2】:

    您有两个主要选择:

    - 任何类型文件的 GENERAL 选项:

    最简洁的方法是为每个配置设置单独的文件。那么:

    • 您可以在项目构建设置中为每个配置设置路径,如下所示:

    • 或者您可以为此文件或在构建过程中需要更改的任何文件使用运行脚本:

      • 创建两个不同的 info.plist 文件,一个用于调试,另一个用于生产
      • 前往项目构建设置并创建新的运行脚本阶段
      • 使用以下脚本:
    sourceFilePath="$PROJECT_DIR/$PROJECT_NAME/"
    debugFileName="Debug-Info.plist"
    releaseFileName="Release-Info.plist"
    
    if [ "$CONFIGURATION" == "Debug" ]; then
    cp $sourceFilePath/$debugFileName "$INFOPLIST_FILE"
    else
    cp $sourceFilePath/$releaseFileName "$INFOPLIST_FILE"
    fi
    

    请注意,在此示例中:

    • 我使用 Debug-Info.plist 作为调试模式文件。
    • 我使用 Release-Info.plist 作为发布模式文件。
    • 我将所有文件复制到与原始info.plist 文件相同的目录中。

    但是我做了所有的变量,你可以把它们改成你想要的。

    - 任何plist 文件的更具体选项:

    由于Info.plist 是一个属性列表,您可以使用PlistBuddy 直接编辑它的任何值。以下是仅在调试模式下添加快捷方式项的示例脚本:

    /usr/libexec/PlistBuddy -c "Delete :UIApplicationShortcutItems" "$INFOPLIST_FILE"
    
    if [ "$CONFIGURATION" != "Debug" ]; then
    exit
    fi
    
    /usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems array" "$INFOPLIST_FILE"
    /usr/libexec/PlistBuddy -c "delete :UIApplicationShortcutItems" "$INFOPLIST_FILE"
    /usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems array" "$INFOPLIST_FILE"
    /usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems:0 dict" "$INFOPLIST_FILE"
    /usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems:0:UIApplicationShortcutItemIconType string UIApplicationShortcutIconTypePlay" "$INFOPLIST_FILE"
    /usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems:0:UIApplicationShortcutItemTitle string Play" "$INFOPLIST_FILE"
    /usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems:0:UIApplicationShortcutItemSubtitle string Start playback" "$INFOPLIST_FILE"
    /usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems:0:UIApplicationShortcutItemType string PlayMusic" "$INFOPLIST_FILE"
    /usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems:0:UIApplicationShortcutItemUserInfo dict" "$INFOPLIST_FILE"
    /usr/libexec/PlistBuddy -c "add :UIApplicationShortcutItems:0:UIApplicationShortcutItemUserInfo:firstShortcutKey1 string firstShortcutKeyValue1" "$INFOPLIST_FILE"
    

    记得在之前 Copy Bundle Resources的某个时间运行这个脚本。

    我建议您始终将脚本代码放在单独的文件中,并在构建阶段调用它。

    【讨论】:

    • 非常酷的解决方案。还没有机会使用 PlistBuddy。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多