我正在探索WatchKit SDK,当我在模拟器中导航应用程序时,我在控制台日志中看到这个错误语句:
2014-11-20 10:43:11.154 MyWatchApp WatchKit Extension[32002:1257966] Can't append data to log file, even after retrying. Giving up. Facilities: <CFArray 0x7fa9d84048d0 [0x110325ef0]>{type = immutable, count = 1, values = (
0 : <CFString 0x10ff04c48 [0x110325ef0]>{contents = "Kermit"}
)}
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?什么是Kermit?如何捕获并探索此警告?
我在通知回来之后尝试更改按钮的标题,但它根本没有响应.我检查了它不是零并检查我分配的文本,一切都很好.我做了属性类型strong而不是weak成功.
- (void) setButtonTitleFromSelectedSearchResult:(NSNotification *)notif
{
[self popController];
self.sourceMapItem = [[notif userInfo] valueForKey:@"SelectedResult"];
NSLog(@"The Selected Result is: %@", self.sourceMapItem.name);
//Testing
NSLog(@"%@", self.fromButton); // check it's not nil
[self.fromButton setTitle:self.sourceMapItem.name];
}
Run Code Online (Sandbox Code Playgroud) 有没有办法在Watchkit中为WKInterfaceLabel添加边距/填充?使用UIEdgeInsets不起作用.
我正在尝试创建一个倒计时x分钟和y秒的计时器.我正在计算秒数并创建InterfaceTimer,如下所示:timer.setDate(NSDate(timeIntervalSinceNow:Double(secondsValue + 1)))timer.stop()
在那之后我一直停下来并一次又一次地开始它,但是价值突然下降,因为"时间(现在)不停止".例如:如果计时器显示:55,我启动它3秒并停止它,它显示:52,我等待10秒然后再次启动它,它从:42开始.
我无法保存当前在WKInterfaceTimer中的值,因此我可以从同一点重新开始.我试过的一切都行不通.有没有人使用计时器,它停止后保持相同的值?
我的Apple Watch应用程序已被App Store拒绝,因为该图标未出现在手表主屏幕上.我在模拟器中看不到任何图标,iPhone模拟器上的配套应用程序已选择我的应用程序出现在手表上并有一个图标.
每个Apple Watch图标都在images.xcassets中提供,这些图标存在于主iPhone应用程序,WatchKit扩展程序和WatchKit应用程序中.
请告诉我如何找出问题所在.
这些是我的WatchKit应用程序包中的图标.

我还根据需要将一个1024x1024图标上传到iTunes Connect.
我的属性检查器为我的WatchKit应用程序的Images.xcassets显示了这个.

我仍然在寻找图像集设置屏幕.
在WatchKit应用程序Info.plist中,Icon files下只有一个图标,icon40.png.
找到了现在的图像集.

我实际上正在使用具有这些设置的AppIcon图像集

40pt图像是80x80 PNG,44pt是88x88 PNG.AppIcon设置中的WatchKit目标指向我的iPhone应用程序Images.xcassets,其中包含这些图标.
现在将使用此信息重新提交到App Store并希望获得最佳效果.
我想制作一个应用程序的可点击原型(仅限故事板).我刚刚添加了两个界面控制器和一些图像和按钮.我用几张图片(总体上小于150kB)填充了xcassets并试图运行该应用程序.当有一个单独的界面控制器有3个按钮(背景图像)+ 1个imageView(大约100kB全部)时,它花了一些时间,但应用程序推出.我添加了1个接口控制器和一些图像(最大的大约9kB),这次Xcode向我显示一条消息,它丢失了与iPhone的连接,但手表仍在运行或手表应用程序超时错误.同时,我在手表屏幕上有一个应用程序名称和一个微调器.它已经旋转多年没有任何结果...我试图从两个设备删除应用程序,重新启动,清理文件夹等,但没有成功.可以在手表的xcassets中放置图像的限制吗?太令人沮丧......
我有这个代码,用于响应强制触摸后点击的菜单项:
class InterfaceController: WKInterfaceController {
override init() {
super.init()
self.addMenuItemWithItemIcon(WKMenuItemIcon.Pause, title: "Pause", action: Selector("test"))
}
func test() {
print("test")
}
}
Run Code Online (Sandbox Code Playgroud)
当我强行触摸时,会出现菜单.当我点击"暂停"按钮时,test()不会被调用.
任何想法为什么会这样?
我发现了许多问题和许多答案,但没有最后的例子请求:
任何人都可以在Objective C中给出最后一个示例,将WCSession与IOS应用程序和带有多个ViewController的Watch应用程序(WatchOS2)一起使用的最佳做法是什么.
到目前为止我注意到的是以下事实:
1.)在AppDelegate的父(IOS)应用程序中激活WCSession:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Any other code you might have
if ([WCSession isSupported]) {
self.session = [WCSession defaultSession];
self.session.delegate = self;
[self.session activateSession];
}
}
Run Code Online (Sandbox Code Playgroud)
2.)在WatchOS2侧使用<WCSessionDelegate>.但其余的对我来说完全不清楚!一些答案是通过在传递的字典中指定键来讨论,如:
[session updateApplicationContext:@{@"viewController1": @"item1"} error:&error];
[session updateApplicationContext:@{@"viewController2": @"item2"} error:&error];
Run Code Online (Sandbox Code Playgroud)
其他人正在讨论检索默认会话
WCSession* session = [WCSession defaultSession];
[session updateApplicationContext:applicationDict error:nil];
Run Code Online (Sandbox Code Playgroud)
其他人在谈论不同的队列?"如果有必要,客户有责任派遣到另一个队列.发送回主要队列."
我完全糊涂了.因此,请举例说明如何将WCSession与IOS应用程序和带有多个ViewController的WatchOS2应用程序一起使用.
我需要它用于以下情况(简化):在我的父应用程序中,我测量心率,锻炼时间和卡路里.在Watch应用程序1. ViewController我将在2显示心率和锻炼时间.ViewController我也将显示心率和燃烧的卡路里.
这在watchOS 1上不是问题,但现在在watchOS 2上我无法读取手表扩展上的值.
根据Apple文档,这是可能的.根据这个帖子的一些人的说法,这是可能的.根据这个线程上的Apple员工的说法,这是可能的.
据我所知,我正确地设置了所有内容:
ApplicationGroupContainerIdentifier为plist 添加了相同的标识符当我NSUserDefaults使用标识符作为套件名称初始化对象时,我无法读取监视扩展名上的值.我可以在iOS应用程序上阅读它们.这发生在模拟器和真实设备中.
请不要发布有关如何使用Watch Connectivity执行此操作的答案.只有在没有Watch Connectivity的watchOS 2上的共享应用程序组才能实现这一点,人们可以做到这一点,而这里直接来自文档:
在watchOS 2中,您的WatchKit扩展可能会读取首选项的值,但您无法编写新值.watchOS 2中的首选项从iOS转发到Apple Watch,但您所做的任何修改都不会发送回iOS.
我的项目有多个构建目标,因此我可以促进共享相同代码的"品牌"构建,但每个目标具有唯一的捆绑标识符和资产.我为我的一个应用目标创建了一个手表应用程序,它运行得很好.现在我正在尝试为我的其他目标使用相同的手表应用程序和扩展程序.我以为我可以轻松复制监视目标(监视和扩展),只需更改所有的bundle id引用以匹配其他目标,但它似乎是隐藏的引用.
我只是想为我所有不同的品牌目标使用一个手表应用程序.
旁注:手表应用程序也需要正确标记(资产文件夹).
有任何想法吗?谢谢.
解决方案更新
所以,我解决了它.当我复制我的监视目标(监视和扩展),并更改了捆绑ID,目标依赖关系,一切都使它与旧目标相同(但当然指向新目标),由于某种原因,新的监视目标没有' t指向正确的手表扩展目标.在任何地方都无法改变它.我试图重新复制目标,仍然有同样的问题.
所以我做的是打开project.pbxproj文件,搜索我的watch扩展(和bundle id)的任何引用并手动更新连接.我的手表目标依赖于错误的手表扩展,而新的手表扩展程序以某种方式指向旧手表扩展.我后来还发现我必须将构建指向正确的产品引用(appex参考),因为这也是错误的.
所以新的手表目标,指向错误的手表扩展,以及正确的手表扩展指向错误的appex(输出文件).所有这些我不得不在项目文件中手动更改.这听起来极端而且很难,但是一旦你记下了不同的UUID,它实际上并不那么困难.
我希望这可以帮助那些可能偶然发现同样奇怪问题的人.
watchkit ×10
ios ×8
apple-watch ×4
swift ×4
watchos-2 ×2
nsdate ×1
objective-c ×1
title ×1
xcode ×1
xcode-6.2 ×1