我正在为Apple Watch编写扩展程序,目的是引导用户完成一系列步骤.我没有手表来测试扩展,但我需要确保屏幕始终保持打开状态,直到完成所有步骤.
有没有人可以告诉我何时关闭Apple Watch显示器或者是否有任何方法可以阻止显示器关闭(类似于iOS中UIApplication的idleTimerDisabled)?
我听说iOS支持内容拦截器,并且所有阻塞都是由一个名为blockerList.jsonApp Bundle 的文件完成的.虽然我知道SFContentBlockerManager.reloadContentBlockerWithIdentifier()会重新加载数据blockerList.json.但是,我认为没有任何用处; 它blockerList.json是主捆绑的一部分,不能修改.因此,有什么方法blockerList.json可以修改(或扩展可以指向另一个文件,删除和重新创建,不使用JSON等)?
根据文档,操作扩展显示在操作表或全屏模式视图中.但对于iPhone纵向方向,默认情况下始终为全屏.如何在iPhone纵向方向的操作表中显示操作扩展视图?
我曾尝试setPreferredContentSize和NSExtensionActionWantsFullScreenPresentation.两者似乎都没有影响iPhone纵向.
我已经尝试按照在线提供的教程设置我的动作扩展图标.我遵循的步骤:
Assets.xcassets是否在扩展的副本包资源列表中可能有什么不对?
我对下面的代码有很奇怪的问题。
extension String {
func height(withConstrainedWidth width: CGFloat, font: UIFont) -> CGFloat {
let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
let boundingBox = boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, attributes: [NSAttributedStringKey.font: font], context: nil)
return ceil(boundingBox.height)
}
}
Run Code Online (Sandbox Code Playgroud)
它总是抛出低于编译器错误。
但是,如果我使用self.boundingRect它,它会成功编译并运行应用程序,但在模拟器上启动应用程序后,它会自动再次恢复boundingRect(删除self)。
所以每次我需要添加self.以执行应用程序时。
我正在尝试创建一个类似于 iOS 中可用的系统“复制”操作的操作扩展。
我发现了不同的答案,说不可能有非全屏 UI,但根据Apple 官方文档,可能没有 UI(就像在复制操作中一样,我认为)。
操作(iOS 和 macOS;UI 和非 UI 变体)
我曾尝试创建透明视图,但结果始终是全屏黑色覆盖。
我已经在我的 中指定了NSExtensionActionWantsFullScreenPresentationto ,但没有任何变化。NOInfo.plist
关于如何做到这一点的任何想法?
我有一个Safari共享扩展,我希望能够从扩展中打开主应用程序.向用户显示警报,其中他们可以选择打开应用程序.
func openAppHandler() {
self.extensionContext?.completeRequest(returningItems: []) { (success) in
if let url = URL(string: "myapp://...") {
self.extensionContext?.open(url, completionHandler: nil)
}
}
}
Run Code Online (Sandbox Code Playgroud)
didSelectPost()调用该方法后会出现警报 ,您可以看到它出现在扩展的后台优先级完成块中.该open方法在其文档中说"在iOS 8中,只有今天的扩展点(用于创建小部件)支持这种方法." 我猜它仍然是在Safari Share Extension中仍然不支持它的情况.
有没有人知道从共享扩展中打开我的主应用程序的方法?
我希望能够在我的应用程序中打开 Safari 链接。为此,我创建了一个操作扩展。我尝试了以下代码的多种变体进行测试,但没有一个变体打开我的主应用程序:
第一次尝试:
func openContainerApp() {
var responder: UIResponder? = self as UIResponder
let selector = #selector(openURL(_:))
while responder != nil {
if responder!.responds(to: selector) && responder != self {
responder!.perform(selector, with: URL(string: "awesome://item?id=20036169")!)
}
responder = responder?.next
}
self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
}
Run Code Online (Sandbox Code Playgroud)
第二次尝试:
func redirectToHostApp() {
let url = URL(string: "awesome://item?id=20036169")
let selectorOpenURL = sel_registerName("openURL:")
let context = NSExtensionContext()
context.open(url! as URL, completionHandler: nil)
var responder = self as UIResponder?
while (responder != nil){
if responder?.responds(to: selectorOpenURL) …Run Code Online (Sandbox Code Playgroud) 我的应用程序有一个share-extension界限。我拥有与扩展相关的所有必需信息app-ids和相关信息,适用于和。当我在 中运行扩展时,它工作得很好。例如,在(即 iPhone 6)上,当选择我的应用程序的inside时,会冻结并且无法打开任何内容。我什至无法调试它,不是因为我不知道如何执行它,而是因为它运行并随后立即停止在.provisioning-profilesdevelopmentdistributionsimulatordeviceshare extensionSafariSafariXcode
provisioning-profiles我认为或可能有问题,app-ids或者可能是由 . 引起的错误或“分发之前缺少功能” Apple。
如果有人对此有任何解决方案或解释,我将非常感激。
编辑:
我更改了background-color扩展程序的视图,storyboard看看它是否根本不起作用。它确实打开了,但SLComposeServiceViewController没有显示。因此,问题一定是由它引起的。
xcode app-id provisioning-profile slcomposeviewcontroller ios-extensions
ios ×7
swift ×4
app-id ×1
apple-watch ×1
iphone ×1
json ×1
objective-c ×1
uiresponder ×1
watchkit ×1
xcode ×1