【问题标题】:Write dynamically content to xCode project .plist将内容动态写入 xCode 项目 .plist
【发布时间】:2015-04-17 09:33:49
【问题描述】:

我想动态复制/更新现有 iOS 应用程序.plist 中的一些内容。

例如,.plist 包含 FacebookAppID 或 Twitter API 密钥,我希望随着时间的推移进行更新,而无需在商店中重新部署应用程序。

我知道我可以将.plistNSBundle 复制到NSDocumentsDirectory 以使其可写。 但是新复制的文件不是操作系统用来访问我需要随时间更改的信息的文件。 由于 SDK(FBSDK 等)仅依赖于属性文件,因此我无法使用其他方式来存储我感兴趣的键/值。

有什么想法吗?

【问题讨论】:

  • 所以 SDK 使用了一个固定的 .plist 文件,它位于 app bundle 中的固定位置?如果这是真的,那么您将无能为力,并且 SDK 已损坏。
  • 顺便说一句,我不相信这是真的,因为没有人那么愚蠢。
  • @trojanfoe 感谢您的反馈。实际上,FB SDK 依赖于 .plist,如他们的入门所示:developers.facebook.com/docs/ios/getting-started 并且 SDK 中没有 API 可以以编程方式设置它。
  • @trojanfoe 实际上看起来我可能弄错了:developers.facebook.com/docs/reference/ios/current/constants/…
  • @trojanfoe 其实貌似appID和appDisplayName是可以动态改变的,但是我们还是要提前在.plist中设置好URL Scheme才能实现回调。

标签: ios objective-c xcode plist nsbundle


【解决方案1】:

无法在运行时编辑 App-Info.plist 文件(请参阅this thread)。

对于 Facebook SDK,您只需在 App-Info.plist 中设置您的 AppID,但 AppID 不会每天更改(Twitter 也是如此)。如果您需要链接另一个应用程序,您需要推送您的应用程序的更新。

如果您有多个应用程序(例如,一个用于生产,一个用于测试),请创建多个目标,并为每个目标创建一个单独的 .plist 文件,以便您可以根据构建的目标切换 AppID。

【讨论】:

    【解决方案2】:

    您不能在运行时执行此操作。

    但您可以在构建期间动态执行此操作。

    1. 在 Xcode 中进入 Build Settings 将 Preprocess Info.plist File 设置为 YES
    2. Info.plist 预处理器前缀文件到您使用 #define 指令放置在项目中的 .h 文件。

    使用 .h 文件来包含您想要放入 plist 的值。

    #ifdef DEVELOPMENT
    
    #define FACEBOOK_APP_ID             @"00000000"
    #define FACEBOOK_APP_URL            @"fb00000000"
    #define FACEBOOK_APP_NAME           @"App Display Name - Test"
    #define FACEBOOK_APP_SECRET         @"abcdef00000000"
    
    #else
    
    #define FACEBOOK_APP_ID             @"00000001"
    #define FACEBOOK_APP_URL            @"fb00000001"
    #define FACEBOOK_APP_NAME           @"App Display Name"
    #define FACEBOOK_APP_SECRET         @"abcdef00000001"
    
    #endif
    

    然后在 info.plist 中,执行以下操作

    <key>FacebookAppID</key>
    <string>FACEBOOK_APP_ID</string>
    <key>FacebookDisplayName</key>
    <string>FACEBOOK_APP_NAME</string>
    

    您不能在运行时执行此操作。但希望这至少可以节省您为项目更新进行所有配置的时间。

    【讨论】:

      猜你喜欢
      • 2016-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多