小编hag*_*agi的帖子

将应用无处不在的容器暴露在iOS 8中的iCloud Drive中

我正在开发一个支持iCloud的应用程序,用户可以通过iCloud Drive导入和导出文件.在浏览iCloud Drive时,无论是使用UIDocumentPickerViewController(iOS 8)还是Finder(OS X Yosemite),我都可以看到其他支持iCloud-Drive的应用创建/拥有的目录,例如Automator,Keynote或TextEdit.

我希望我们的应用程序也能在iCloud Drive中公开其无处不在的文档目录,但还未能弄明白.在上述某些应用程序的Info.plist文件中,我发现了这个密钥:

<key>NSUbiquitousContainers</key>
<dict>
    <key>com.apple.TextEdit</key>
    <dict>
        <key>NSUbiquitousContainerIsDocumentScopePublic</key>
        <true/>
        <key>NSUbiquitousContainerSupportedFolderLevels</key>
        <string>Any</string>
    </dict>
</dict>
Run Code Online (Sandbox Code Playgroud)

这些密钥也在这里记录,但我没有找到更广泛主题的任何其他文档.编辑/注意:虽然它不包含我的问题的答案,但文档选择器编程指南是一个有用的资源.

我已经尝试将上述键/值添加到我们的应用程序,但没有看到任何影响.我注意到/尝试过的事情:

  • 对于第三方应用程序,iCloud容器以这种方式构建:iCloud.$(CFBundleIdentifier).我不确定为什么TextEdit只使用纯包标识符,但对于我们的标识符,我尝试了两种方法,即有和没有iCloud.前缀.我还认识到你需要对包标识符进行硬编码(即,不要使用iCloud.$(CFBundleIdentifier)),因为只有PLIST的值似乎在构建时解析,而不是键.

  • 我以编程方式(to <containerPath>/Documents)添加了一个子目录,因此容器不为空.但是,这并不重要,因为所有其他应用程序的目录最初都是空的.

  • 出现在iCloud Drive中的某些Apple应用程序中没有这些条目Info.plist,例如Numbers和Pages.

  • iCloud设置正确,我可以使用返回的URL以编程方式查看ubiquity容器[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];.

  • 我登录到启用了iCloud Drive的iCloud帐户.我可以看到我的iCloud Drive内容UIDocumentPickerViewController.

  • 我使用iOS 8 beta 5模拟器(和Yosemite beta 5来查看Mac上的iCloud Drive目录)(编辑/注意:这同样适用于beta 6)

这就是我的Entitlements文件的样子(仅限相关部分)

<key>com.apple.developer.icloud-container-identifiers</key>
<array>
    <string>iCloud.$(CFBundleIdentifier)</string>
</array>
<key>com.apple.developer.icloud-services</key>
<array>
    <string>CloudDocuments</string>
</array>
<key>com.apple.developer.ubiquity-container-identifiers</key>
<array/>
Run Code Online (Sandbox Code Playgroud)

我已经在Capabilities部分使用Xcode的UI进行了设置.我不明白为什么最后一个键没有条目,但添加<string>iCloud.$(CFBundleIdentifier)</string>没有帮助.相反,它使Xcode在Capabilities UI中抱怨,所以我删除了它.编辑/注意: …

entitlements info-plist icloud icloud-api ios8

27
推荐指数
3
解决办法
2万
查看次数

Swift Playgrounds:captureValue的替换(_:withIdentifier :)

Xcode 7.3 已被弃用 XCPlaygroundPage.currentPage.captureValue(_:withIdentifier:).它的前身,在Xcode 7.1 XCPCaptureValue()弃用.

我想知道是否有任何替换,除了隐式捕获集合和循环?除了是更灵活的使用显式方式,添加字幕图形的能力似乎与弃用/移除(尽管符号被发现,上述不赞成的方法没有做任何事情,或者至少不是你"消失d期待).

xcode swift swift-playground xcode7 xcode7.3

11
推荐指数
1
解决办法
2566
查看次数

Clang没有在C++中报告未经初始化的变量?

我知道局部变量没有在C++中自动初始化,所以在使用它们之前,你应该总是给它们赋值.但是,至少在简单的情况下,编译器应该在您忘记它时警告您.我或多或少地依赖并参考了这篇文章.

鉴于这个程序,我假设在发送xstd::out... 时会收到警告

#include <iostream>

int main(int argc, const char * argv[])
{

  int x;
  std::cout << x;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

......但没有警告弹出.但是,如果我运行静态分析器,我会收到预期的警告:函数调用参数是未初始化的值.

我使用Apple LLVM 5.1编译器使用Xcode 5.1编译和运行.我使用Xcode命令行项目模板(C++)中的标准构建设置,语言方言设置为GNU99(对于C)和GNU ++ 11(C++).

" 未初始化的变量"选项设置为" 是"(激进)(-Wconditional-uninitialized).切换到刚才(-Wuninitialized)提出警告:变量"X"在这里使用时未初始化.问题第1部分:为什么警告不显示默认设置(-Wconditional-uninitialized)?Xcode中的文档表明,aggressive选项会发现更多问题:

您可以在正常的未初始化值检查或更积极(保守)检查之间切换,这会发现更多问题,但检查更加严格.

奇怪的是,当我运行程序时,值总是0如此,所以出于某种原因,它似乎是初始化的.问题第2部分:为什么?

c++ clang compiler-warnings

5
推荐指数
1
解决办法
2449
查看次数

在 UIDocumentPickerViewController 中显示自定义 UTI 的图标

我正在开发的 iOS 应用程序导出了 UTI。相关部分Info.plist如下所示:

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.xml</string>
            <string>public.data</string>
        </array>
        <key>UTTypeDescription</key>
        <string>GPX Document</string>
        <key>UTTypeIdentifier</key>
        <string>de.company.app.gpx</string>
        <key>UTTypeSize320IconFile</key>
        <string>Doc320.png</string>
        <key>UTTypeSize64IconFile</key>
        <string>Doc64.png</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>gpx</string>
            </array>
        </dict>
    </dict>
</array>
Run Code Online (Sandbox Code Playgroud)

我希望应用程序通过“打开方式...”对话框处理 GPX 文件,因此在同一个 PLIST 中还有一个文档类型定义(引用 UTI):

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeIconFiles</key>
        <array>
            <string>Icon29.png</string>
            <string>Icon58.png</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>de.company.app.gpx</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>de.company.app.gpx</string>
        </array>
    </dict>
</array>
Run Code Online (Sandbox Code Playgroud)

在 Safari 中打开 GPX 文件时,它会显示我在 下指定的图标CFBundleTypeIconFiles,即Icon58.png在视网膜设备上。该应用程序还允许通过 iOS 8 中引入的 UIDocumentPickerViewController 类进行导入,虽然 UTI 定义适用于过滤 iCloud Drive 中的相关文件,但它不显示我指定的任何图稿:

我已确保所有引用的图像文件(Icon29.png …

xcode uti ios ios8

5
推荐指数
1
解决办法
4284
查看次数