这是我的PodFiles,因为apple watch扩展只需要主应用程序中的部分库.
# Uncomment this line to define a global platform for your project
platform :ios, '7.0'
######################
source 'https://github.com/CocoaPods/Specs.git'
#source 'https://github.com/albertodebortoli/ADBCocoaPodsRepository.git'
target 'MyAppDev WatchKit Extension', :exclusive => true do
pod 'MagicalRecord/Core+Logging', :git => 'https://github.com/magicalpanda/MagicalRecord.git'
pod 'BlocksKit'
pod 'EncryptedCoreData'
end
# Logging
pod 'CocoaLumberjack' #2.0.0-beta4 at the moment
# Networking
pod 'AFNetworking', '~> 2.0'
#pod 'IADownloadManager'
#pod 'TCBlobDownload'
#pod 'ObjectiveCDM', '~> 1.0.5'
#pod 'librabbitmq-objc'
# Database
pod 'MagicalRecord/Core+Logging', :git => 'https://github.com/magicalpanda/MagicalRecord.git'
#pod 'couchbase-lite-ios'
######################
pod 'StompKit'
######################
#pod 'MQTTKit', :git …Run Code Online (Sandbox Code Playgroud) 在iOS上实施Spotlight搜索插件需要实施CSSearchableIndexDelegate。有没有办法触发reindexAllSearchableItemsWithAcknowledgementHandler和reindexSearchableItemsWithIdentifiers。我希望能够触发它们,以便可以对其进行测试。
我正在尝试通过从 TunnelProvider 的 XCode 模板开始,然后将代码添加到主机应用程序来配置并启动它来制作自定义 TunnelProvider 网络扩展。
我正在使用 NETunnelProviderManager 的实例来配置它,当我调用 saveToPreferencesWithCompletionHandler: 时,我获得成功(错误 = 0)。但是,当我在(非零)连接上调用 startVPNTunnelAndReturnError: 时,我总是收到以下错误:
错误域=NEVPNErrorDomain代码=1“(空)”
我已经阅读了所有相关的Apple文档,并尝试使我的程序看起来尽可能接近SimpleTunnel测试程序,但是我无法确定为什么我得到这个“1”(这似乎表明配置问题) 。
我在网上的帖子中看到其他一些人也遇到了同样的问题,但没有解决方案。
我有所需的特殊权利,我知道这不是问题,因为使用正确的配置文件后,我能够看到弹出窗口,确认我要在运行应用程序时添加 VPN,然后将其添加到 VPN 下的“设置”中。
这是我的代码,以防相关:
NETunnelProviderManager * man = [[NETunnelProviderManager alloc] init];
NETunnelProviderProtocol *protocol = [[NETunnelProviderProtocol alloc] init];
[protocol setServerAddress:@"aaa.bbb.ccc.ddd"]; // not actual value
[protocol setUsername:@"testuser"];
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
NSData *data = [[NSData alloc] init];
[dictionary setObject:@"UUID" forKey:(id)kSecAttrService];
[dictionary setObject:data forKey:(id)kSecValueData];
[dictionary setObject:(__bridge id)kSecAttrAccessibleAlways forKey:(id)kSecAttrAccessible];
[dictionary setObject:(__bridge id)kSecClassGenericPassword forKey:(id)kSecClass];
[dictionary setObject:(__bridge id)kCFBooleanTrue forKey:(id)kSecReturnPersistentRef];
CFTypeRef passwordRef = nil; …Run Code Online (Sandbox Code Playgroud) 我有一个使用这些规则的共享扩展:
<dict>
<key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
<integer>1</integer>
<key>NSExtensionActivationSupportsWebPageWithMaxCount</key>
<integer>1</integer>
<key>NSExtensionActivationSupportsImageWithMaxCount</key>
<integer>10</integer>
<key>NSExtensionActivationSupportsText</key>
<integer>1</integer>
</dict>
Run Code Online (Sandbox Code Playgroud)
它非常适合普通网站和图像,但我无法像这样解析图像网址:( http://www.zappos.com/images/z/3/3/5/4/0/3/3354034-p- 2x.jpg)。我厌倦了添加其他规则,但当我使用 Safari 打开此网站并单击共享时,我的共享扩展程序仍然不会出现。
但如果我将规则设置为 TRUEPREDICATE,我的共享扩展就可以解析该网站。
我做错了什么?谢谢
我正在为我的应用实现导出/导入功能:
使用自定义文件扩展名导出数据(Backup.appname)→点击邮件或iCloud驱动器中的文件→让我的应用程序在共享表中显示为"使用AppName导入".
我在我的应用程序的plist中添加了一个自定义UTI和文档类型,如此处所述.一切都按预期工作,除了我的应用程序显示为"复制到AppName",而不是"使用AppName导入".
如何将其显示为"使用AppName导入"?我见过其他应用程序有自己的自定义文件类型.
我正在构建一个管理音频文件的iOS应用。它包括一个共享扩展名,可以从其他应用程序接收音频文件。它还可以与其他应用程序共享其音频文件。
从我的应用程序启动共享时,我不希望自己的应用程序出现在共享表中。换句话说,我不希望用户将自己的音频文件发送回我的应用程序。
我找不到用NSExtensionActivationRule排除自己的应用程序的方法。
我有一个动作扩展,它接受图像,对图像进行小修改(例如叠加水印),然后允许用户打开另一个UIActivityController,将修改后的图像发送到另一个(任意)扩展(例如与社交媒体分享图片)。与大多数(但不是全部)扩展共享后,我的扩展崩溃了,因为达到了内存限制。
我得到的错误是:
EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=120 MB, unused=0x0)
Run Code Online (Sandbox Code Playgroud)
这在操作系统驱动的UIImage调用的深处发生。
脚步:
对于iOS提供的扩展名(例如保存或打印),不会出现崩溃。崩溃确实会出现在我尝试过的所有第三方扩展中。
我用仪器进行诊断。我的扩展程序在执行图像操作时的内存使用量短暂达到75MB的峰值,然后降至27MB。当用户界面开始为其他扩展程序构建时,我的应用程序的内存占用量迅速飙升。它达到120MB,然后消失。
在内存升级期间,我收到了三个didReceiveMemoryWarning调用。我持有的唯一数据是屏幕上的UIImageView。我已经尝试过杀死UIImageView了(imageView.removeFromSuperview然后imageView = nil),结果没有变化。
似乎辅助扩展正在我的扩展的内存中加载,并且合并的占用空间超过了120MB的限制。那有意义吗?那是预期的吗?
我承认存在一个扩展的想法是存在的,它只是暂时保留要与另一个扩展共享的数据,但这并不是我能想到的最佳方法。修改后的数据不需要永久保存-如果新版本的照片库中也有新版本,则用户很容易混淆。我曾考虑过扩展程序可以从那里打开我的主应用程序进行共享,但是这似乎是被设计所阻止的(有些黑客建议我没有尝试过-请参见openURL在Action Extension中不起作用)。
有任何解决方法吗?谢谢!
我正在尝试使用 iOS 的 NetworkExtension 框架实现类似于iOS 的 Charles 的数据包嗅探器。
所以,这是一个很大的目标,我现在将其分解为一小部分:我想os_log从我的NEPacketTunnelProvider(图中底部的方框)中看到
我正在 Console.app 中查看 的输出os_log("STARTING TUNNEL!!!!")。当我加载配置并调用 时startVPNTunnel(),为什么我的 TunnelProvider 代码从未被调用?
我已经startVPNTunnel()通过在代码中放置断点来验证正在调用该函数。
我有一个带有CallKit通话拦截分机的应用程序。通常,它可以正常工作,但是在某些设备上,偶尔会被其自身禁用(嗯,实际上我想是由iOS禁用),因此用户必须转到“设置”,然后再次手动将其重新启用。但是,这种行为没有任何明显的原因:被阻止的电话号码数据量足够小(该应用程序大多数时候甚至可以使用较大的数据集,因此这不应该是内存问题),将号码排序顺序正确(升序),没有重复的数字等。重现该问题也很困难。感觉像是来自“外部世界”的东西干扰了扩展程序(另一个带有扩展程序的应用程序?),但是没有证据。
这种自动禁用的原因可能是什么?如何避免这种情况?
任何帮助,将不胜感激。
谢谢!
我的应用程序有一个通知服务扩展,用于修改我的常规推送通知,效果很好。didReceive扩展中的方法将覆盖AppDelegatedidReceiveRemoteNotification中的方法。但是,如果我发送静默通知或仅发送未将“mutable-content”参数设置为 true 的通知,则不会调用扩展(如预期)。但是,didReceiveRemoteNotification也没有被调用,所以我无法处理通知。
如果没有扩展,didReceiveRemoteNotification则会在静默通知和未设置“可变内容”的通知上调用。在我的情况下不应该也这样称呼吗?或者我对扩展有什么误解?
push-notification apple-push-notifications ios swift ios-extensions
ios ×10
ios-extensions ×10
apple-watch ×1
callblocking ×1
callkit ×1
cocoapods ×1
ios9 ×1
objective-c ×1
swift ×1
tunnel ×1
uiimage ×1
vpn ×1