iOS 13的变化:
更改1:在iOS 13 Beta 6中,操作系统不再处理优先级为10的静默远程通知(AKA背景通知),而是将其丢弃。过去有记录,但从未执行过。
文件:
为有效负载包含内容可用键的通知指定此优先级(10)是错误的。
日志:
错误14:11:19.224387 +0300 dasd不支持:高优先级静默推送。(App =)
默认14:11:19.224713 +0300 dasd守护程序取消活动:{(com.apple.pushLaunch.com.some.bundle:64660B)}
默认值14:11:19.225032 +0300 dasd已取消:com.apple.pushLaunch.com.some.bundle:64660B的优先级为10!
默认14:11:19.225363 +0300 dasd按活动删除对应用程序的启动请求
变更2:向运行iOS 13的设备发送值为background或的通知时,需要一个新密钥apns-push-type alert。
符合上述要求后,我仍然看到有关无提示远程通知的随机行为。我可以看到通知已到达设备,并且在某些情况下(即使设备已连接到电源),通知也已被操作系统删除。
失败日志:
默认值12:19:33.450155 +0300 dasd提交的活动:com.apple.pushLaunch.some.bundle:3B0049,优先级5 <§private>
默认12:19:33.457216 +0300 dasd <§private>不允许推送
默认值12:19:33.457355 +0300 dasd守护程序取消活动:{(com.apple.pushLaunch.some.bundle:3B0049)}
成功日志:
默认14:37:33.633462 +0300 dasd提交的活动:com.apple.pushLaunch.com.some.bundle:D1EEDF的优先级为5 <§private>
默认值14:37:33.639191 +0300 dasd为活动<§private>添加启动请求(<§private>)以进行应用
默认的14:37:33.639240 +0300 dasd对<§private>的启动请求:<§private>
回到文档:
指定5以基于用户设备上的电源注意事项发送通知。对于其有效负载包括内容可用密钥的通知,请使用此优先级。具有此优先级的通知可能会被分组并突发发送到用户的设备。它们也可能受到限制,在某些情况下无法交付。
据我所知,静默通知会受到限制,不会随机发送(即使电池已满并且设备已连接到电源)
仍在尝试找出这是正确的行为还是Apple将要修复的错误。
在我们的一个应用程序中,我被要求记录上次修改的图像日期.这样我可以检查服务器是否已更改某个映像并相应地更新我的缓存.
我的第一种方法是访问文件属性并进行比较,但在线的一些地方提到了延迟方面的严重瓶颈.
我的第二选择是创建一个SQLite表来管理它.(使用fmdb)
我决定编写一个简单的延迟测试.在下一个测试中,我正在访问500个文件属性和500个sqlite记录:
- (void)latencyTest
{
NSMutableArray *arrayTest1 = [[NSMutableArray alloc]init];
NSMutableArray *arrayTest2 = [[NSMutableArray alloc]init];
FMResultSet *results = [_database executeQuery:@"SELECT * FROM `tb_media`"];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd-MM-yyyy HH:mm:ss:SSS"];
NSLog(@"Time1: %@",[formatter stringFromDate:[NSDate date]]);
int i=1;
while(i<501)
{
NSString *test = [NSString stringWithFormat:@"%@/_media/media/19/%d.jpg",_outputPath,i];
NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:test error:nil];
NSDate *dateX = [attributes fileModificationDate];
[arrayTest1 addObject:dateX];
i++;
}
NSLog(@"Time2: %@",[formatter stringFromDate:[NSDate date]]);
while([results next])
{
NSDate *myDate = [NSDate dateWithTimeIntervalSince1970:[results intForColumn:@"last_update"]];
[arrayTest2 addObject:myDate]; …Run Code Online (Sandbox Code Playgroud) 我一直在使用常量中的下一行来区分设备并获取设备的数量.什么是识别iPhone 5并仍然保持一线格式的合适方式?
#define iPhoneType [[UIScreen mainScreen] scale]==2 || [UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad ? @"4" : @"3"
Run Code Online (Sandbox Code Playgroud)
谢谢
编辑:很多好的答案,但我的目标是为所有设备保持一行格式.
编辑: 根据评论,这个问题需要一些澄清.以下是要求:
@"3",@"4"或@"5"取决于iOS设备上.@"5".@"4".@"3".我正在翻新一个python脚本,检查IMAP是否有新电子邮件,如果有新邮件则发送推送通知.问题是每隔几个小时我就会崩溃.起初我无法真正理解发生了什么,但后来我发现M.debug = 4这给了我一个很好的输出,但我仍然无法理解导致问题的原因.我已经将我的脚本和调试输出从正常行为发布到崩溃,希望在python中有更好理解的人可以告诉我发生了什么以及如何解决它.
编辑:
我按照以下答案中的建议编辑了我的代码:
while True:
try:
[call function that does all your logic]
except imaplib2.IMAP4.abort:
print("Disconnected. Trying again.")
Run Code Online (Sandbox Code Playgroud)
或这个:
while True:
try:
[call function that does all your logic]
except (imaplib2.IMAP4.abort, imaplib2.IMAP4.error) as e:
print("Disconnected. Trying again.")
Run Code Online (Sandbox Code Playgroud)
但是在一段不确定的时间之后我仍然会遇到崩溃,而且异常永远不会被抓住.print("Disconnected. Trying again.")永远不会执行.
代码:
#!/usr/local/bin/python2.7
print "Content-type: text/html\r\n\r\n";
import socket, ssl, json, struct, re
import imaplib2, time
from threading import *
# enter gmail login details here
USER="username@gmail.com"
PASSWORD="password"
# enter device token here
deviceToken = 'my …Run Code Online (Sandbox Code Playgroud) 我已经更新了一个带有小错误修复的旧应用程序.该应用程序是使用Xcode 5.1编译的.(无法使用资产目录或添加iPhone 6和6 Plus图像.)但是当我尝试提交它以进行审核时,我收到此错误:
您必须提供4.7英寸Retina显示屏的屏幕截图,因为您的应用程序二进制文件支持4.7英寸Retina显示屏.
您必须提供5.5英寸Retina显示屏的屏幕截图,因为您的应用程序二进制文件支持5.5英寸Retina显示屏.
最简单的解决方法是上传4.7和5.5图片,这很好,但我更担心" 因为你的应用程序二进制文件支持4.7英寸Retina显示 "部分.
虽然感觉就像iTunes连接中的一个错误,但任何人都找到了解决方法吗?
我有一个包含不同对象的Mutable数组,如字符串,UIImage等.它们的排序方式如下:
例:
BugData *bug1 = [[BugData alloc]initWithTitle:@"Spider" rank:@"123" thumbImage:[UIImage imageNamed:@"1.jpeg"]];
...
...
NSMutableArray *bugs = [NSMutableArray arrayWithObjects:bug1,bug2,bug3,bug4, nil];
Run Code Online (Sandbox Code Playgroud)
所以基本上它是一个包含不同属性的对象的数组.
我尝试使用下一个代码将单个字符串保存到文件中并且它工作正常但是当我尝试使用对象保存数组时,我得到一个空的plist文件.
NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSString * path = [docsDir stringByAppendingPathComponent:@"data.plist"];
NSLog(@"%@",bugs); //Making sure the array is full
[bugs writeToFile:path atomically:YES];
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有一个带有5个标签的TabBar的应用程序(常规标签栏没有自定义类).当我启动应用程序时,左侧选项卡打开.我希望它首先打开中间的一个.我试过试试
[self.tabBarController setSelectedIndex:3];
Run Code Online (Sandbox Code Playgroud)
在ViewController的ViewDidLoad中,首先打开但是选项卡没有切换.
我可以看到它突出显示但未选中.如果我把上面的代码放在viewWillAppear它下面就会在第一次运行时被选中,但是当我不时地选择左边的标签时它会跳到中间的那个.
也尝试了这个没有成功:
DetailsViewController* vc = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailsViewController"];
[self.navigationController pushViewController:vc animated:true];
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
EKEventStore *eventStore = [[UpdateManager sharedUpdateManager] eventStore];
if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)])
{
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)
{
if (granted)...
Run Code Online (Sandbox Code Playgroud)
我想要求用户允许将事件添加到他的日历中.在我被授予后,我需要再次请求权限,例如我想删除一个事件(在应用程序关闭并重新打开后的另一个会话中)或者它只是一个想要的时间吗?
如果这是一次性的事情,我可以在第一次午餐时把它放在ViewDidLoad中,只是为了"摆脱它"吗?
我正在尝试显示一个满载的webview.我不希望用户在加载过程中看到webview.我一次处理几个webview并使用webViewDidFinishLoad它对我来说更复杂,所以我试图做这样的事情:
while(_lastWebView.isLoading)
{
_lastWebView.hidden=YES;
}
_lastWebView.hidden=NO;
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个消息:void SendDelegateMessage(NSInvocation*):委托()在等待10秒后无法返回.主运行循环模式:kCFRunLoopDefaultMode
我不明白为什么进入循环因为isLoading加载完成后返回0.
-(void )getDataFromServer: (NSMutableDictionary *)dict
{
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/doSomething",MainURL ]];
[AFJSONRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"text/html"]];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:nil parameters:dict];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
{
_myArray = JSON;
[_myTableView reloadData]; //Or do some other stuff that are related to the current `ViewController`
}
failure:^(NSURLRequest *request , NSURLResponse *response , NSError *error , id JSON)
{
NSLog(@"request: %@",request);
NSLog(@"Failed: %@",[error localizedDescription]);
}];
[httpClient enqueueHTTPRequestOperation:operation];
}
Run Code Online (Sandbox Code Playgroud)
我在我的一个应用程序中的7个不同位置使用上面的代码.确切的代码块在我的7个中重复 …
ios ×7
objective-c ×7
cocoa-touch ×3
iphone ×2
afnetworking ×1
arrays ×1
gmail-imap ×1
imap ×1
imaplib ×1
ios13 ×1
plist ×1
python ×1
python-2.7 ×1
sqlite ×1
tabbar ×1
uiwebview ×1