我收到一封电子邮件,我最近提交给Apple的iOS/Watch OS应用程序的二进制文件无效,原因如下:
该应用程序链接到PlugIns/iPrayed.appex/iPrayed WatchKit App.app/_WatchKitStub/WK中的非公共库:/System/Library/PrivateFrameworks/SockPuppetGizmo.framework/SockPuppetGizmo
我之前提交过这个版本没有任何问题,只对几行代码进行了一些更改,而没有添加任何内容.有什么想法这是关于什么的?
问题:构建挂起,显示“iPhone 正忙:让 Apple Watch 做好开发准备”
更多事实:
有谁知道这个问题的解决方案?
很多开发者都面临着同样的问题:
#available 在区分watchOS和iOS时似乎不起作用.
以下是iOS和watchOS之间共享的代码示例:
lazy var session: WCSession = {
let session = WCSession.defaultSession()
session.delegate = self
return session
}()
Run Code Online (Sandbox Code Playgroud)
...
if #available(iOS 9.0, *) {
guard session.paired else { throw WatchBridgeError.NotPaired } // paired is not available
guard session.watchAppInstalled else { throw WatchBridgeError.NoWatchApp } // watchAppInstalled is not available
}
guard session.reachable else { throw WatchBridgeError.NoConnection }
Run Code Online (Sandbox Code Playgroud)
似乎它只是默认为WatchOS,并且#available编译器不会考虑它.
我是否滥用此API或是否有其他方法可以区分iOS和WatchOS之间的代码?
更新:似乎我误用了BPCorp提到的API
使用Tali的上述代码解决方案:
#if os(iOS)
guard session.paired else { throw WatchBridgeError.NotPaired }
guard session.watchAppInstalled else { throw WatchBridgeError.NoWatchApp }
#endif …Run Code Online (Sandbox Code Playgroud) 我使用WatchKit 1.0创建了一个iOS/Apple Watch应用程序,它使用共享组容器和自定义框架来访问同一个Core Data存储.现在,在watchOS 2.0的过渡指南中,Apple说:
如果您现有的Watch应用程序和iOS应用程序使用共享组容器或iCloud交换数据,则必须更改watchOS 2中交换数据的方式.由于WatchKit扩展现在可在Apple Watch上运行,因此扩展必须与iOS交换数据app无线.您可以使用NSURLSession对象或使用Watch Connectivity框架来执行此操作,该框架支持iOS应用程序和WatchKit扩展之间的双向通信.
但是,这如何与Core Data一起使用?我是否需要维护两个单独的存储,一个位于手表上的Documents文件夹中,另一个位于手机上,并使用Watch Connectivity框架同步更改?我看到watchOS 2.0可以访问Core Data框架(它位于可用技术列表中)......但是我不确定当商店位于手机上时它会有多大帮助.任何帮助/指导表示赞赏!
我正在努力在视图中输出随机字符串。
由于错误:
类型 '()' 不能符合 'View
我了解到 View 不是写下函数本身的合适位置。
我应该怎么做才能输出itemX.randomElement()和itemY.randomElement()?
struct SummaryView: View {
var avgValue = 1.5
var roundedKarvonenValue: Double
var itemX = ["A", "B", "C", "D", "E", "F", "G", "H"]
var itemY = ["I", "J", "K", "L", "M", "N", "O", "P"]
var body: some View {
ScrollView {
VStack(alignment: .leading) {
if workoutManager.averageHeartRate < roundedKarvonenValue {
print(itemX.randomElement()!)
} else {
print(itemY.randomElement()!)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 使用Watch OS 2.0开发人员应该被允许访问心跳传感器....我很想玩它并为我的想法构建一个简单的原型,但我无法找到关于任何地方的信息或文档此功能.
谁能指出我如何处理这项任务?任何链接或信息将不胜感激
我一直在摆弄Xcode 7,我知道它只支持Swift 2,并且没有办法在Xcode 7中支持Swift 1.0或1.2.这很好.
现在来看看WatchOS,我可以在Xcode 7中分别为WatchOS1和WatchOS2分别设置两个目标,以便我可以同时支持吗?
我正在查看监视目标和iOS应用目标的构建设置中的部署目标设置,但我只能在列表中看到WatchOS2
我可以在Xcode 7中分别为WatchOS1和WatchOS2支持两个目标吗?如果是这样,我应该在某个地方安装WatchOS1 SDK?或者这完全不可能,如果不是为什么?
如果可以支持两个目标,那么我如何防止两个目标的源重复,因为两个操作系统在体系结构方面存在显着差异.
另外自从推出WatchConnectivity框架以来,iOS对应应用程序也会有一些变化,如何为两个目标维护呢?
我很困惑,我需要迅速做出决定,任何帮助表示赞赏.
我正在尝试将 watchOS 应用程序的视图转换为 Swift UI。我想将 watchKit 中的音量控制移植到带有自定义控件的 SwiftUI。在下图中,您可以看到视图的当前状态。
音量控制会根据当前状态更改铃声的进度,volume并且volume在我转动数码表冠时也会更改。如果没有 SwiftUI,就可以在旋转表冠时调用一个函数。这已经改变了,系统只允许我绑定一个变量。
我想知道的是绑定一个变量并在该变量的每次更改时调用一个函数。因为正常的 Digital Crown 行为不能满足我的需求。
一件事有效,但远非完美是:
.digitalCrownRotation($crownAccumulator, from: -100.0, through: 100.0, by: 1, sensitivity: .low, isContinuous: true, isHapticFeedbackEnabled: true)
.onReceive(Just(self.crownAccumulator), perform: self.crownChanged(crownAccumulator:))
Run Code Online (Sandbox Code Playgroud)
OnReceive 将在每次旋转表冠时调用,但也会在视图的每一次其他更新时调用。
所以我想要的是这样的管道:
皇冠旋转?crownAccumulator变化 ?名为 async 的函数?功能更新volume
过去我会使用 didSet 来完成此操作,但这不再可用
这里是它的代码:
@ObservedObject var group: Group
@State var animateSongTitle: Bool = false
@State var songTitle: String = "Very long song title that should be scrolled"
@State var artist: String = "Artist name"
@State …Run Code Online (Sandbox Code Playgroud) Apple自己的Activity应用程序有一个有趣的功能,我尝试在我自己的手表应用程序中重新实现:活动应用程序中的每个页面都是可滚动的,基本上有2个垂直页面.第一页是圆圈,第二页显示更多信息.
但是这些页面在使用数字表冠时通常不会向上和向下滚动 - 它们会拍摄.所以你不能在页面之间滚动.Apple似乎使用了WKInterfaceTable两行但我没有找到任何文档如何实现捕捉行为.
他们是如何做到的呢?
我有一个带有此堆栈的名为 MyWatchView 的 Swift UI 结构。
VStack (alignment: .center)
{
HStack
{
Toggle(isOn: $play)
{
Text("")
}
.padding(.trailing, 30.0)
.hueRotation(Angle.degrees(45))
if play
{
MyWatchView.self.playSound()
}
}
}
Run Code Online (Sandbox Code Playgroud)
它还有@State private var play = false; 一个函数 playSound 是这样的:
static private func playSound()
{
WKInterfaceDevice.current().play(.failure)
}
Run Code Online (Sandbox Code Playgroud)
我收到类型“()”不能符合“视图”的错误;只有结构/枚举/类类型可以符合协议我认为这可能是我不理解结构在 Swift 中工作的方式。我正在尝试使用计时器来触发播放声音功能。这是我在我的 iOS 故事板应用程序中的视图控制器类中的代码timer = Timer.scheduledTimer(timeInterval: interval, target: click class, selector: #selector(clickClass.repeatSound), userInfo: clickClass, repeats: switchView.isOn)