小编Jan*_*Jan的帖子

无声推送未在iOS 11上传送到应用程序

我注意到在iOS 11 beta 2上,application:didReceiveRemoteNotification:fetchCompletionHandler无论应用程序的状态如何(背景/前景),都不会传递静默通知.

我实现了该UIApplicationDelegete方法,application:didReceiveRemoteNotification:fetchCompletionHandler并发送以下静默推送

{  
  "aps": {  
    "content-available": 1  
  },  
  "mydata": {  
    "foo": "bar"  
  }  
} 
Run Code Online (Sandbox Code Playgroud)

但是在iOS 11上没有调用委托方法.

它在其他版本的iOS上工作正常,文档部分配置静默通知没有提到应该做的任何其他事情.

这是iOS 11中的错误还是我错过了iOS 11中的新功能?

请注意,我不是在讨论或使用UserNotification发送静默推送所不需要的框架.

这是一个说明问题的示例项目(您必须设置自己的包ID)

当您在示例项目中进行午餐并将上述有效负载发送到应用程序时,您可以使用macOS控制台查看推送是否已正确传递到设备,而不是应用程序.

更新10.08

看来行为是随机的.有时在重新启动设备后,有效负载会正确传送,但一段时间后它会停止工作.

正如您在下面的屏幕截图中看到的那样,标记为1的推送仅对设备进行了延迟,并且推送2(设备重启后)也会传送到应用程序.

在此输入图像描述

更新14.08 - iOS 11 Beta 6

还是一样的行为.应该起作用的另一件事但不是以下.当应用程序的方案设置为"等待可执行文件启动"时,静音推送应该唤醒应用程序并在后台启动它.

在此输入图像描述

更新21.08 - iOS 11 Beta 7

在错误报告中仍然是Apple的相同行为而不是更新.

更新29.08 - iOS 11 Beta 8

仍然是同样的问题.我现在使用的重现步骤如下:

  • 在Xcode项目方案中,选择"等待可执行文件启动"
  • 在中添加断点 didReceiveRemoteNotification: fetchCompletionHandler
  • 在设备上启动应用
  • 发送上面的静音推送

预期:应用程序从暂停状态进入后台并被didReceiveRemoteNotification: fetchCompletionHandler调用

实际:没有任何反应

更新06.09 - iOS 11 Beta …

push-notification ios ios11

158
推荐指数
7
解决办法
3万
查看次数

处理iOS 10上的用户通知

我很难确定用户何时点击iOS 10上的用户推送通知.

到目前为止,我一直在使用当时-[UIApplicationDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:]调用的

  • Case 1:应用程序处于活动状态并且已收到推送
  • Case 2:当用户在录制收到的通知后启动应用程序时

这个方法明确说明了

请注意,此行为与application:didReceiveRemoteNotification:形成对比,在这些情况下不会调用,如果实现此方法,则不会调用此行为.

所有这些都按预期工作.

现在iOS 10弃用了这个委托方法并引入了UserNotification我无法使用的框架,因为我仍然以iOS 8和9为目标.

当我的应用程序在iOS 10上运行并且在应用程序处于活动状态时收到推送(Case 1)时,-[AppDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:]会正确调用该应用程序.

同样在iOS 10上,当用户通过点击通知(Case 2)启动应用程序时,不会调用此方法 .

我意识到,当我实现旧版本时,-[UIApplicationDelegate application:didReceiveRemoteNotification:]它就是那个被调用的版本 Case 2

在iOS 8和9,在Case 2它是-[AppDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:]被调用的方法.

这是否意味着我必须更新我的应用程序并为iOS 10实现旧代理?

所以问题是,在不使用UserNotification框架的情况下,在iOS 10上处理所接收推送的用户交互的正确实现是什么.

欢呼声,Jan

push push-notification ios10

26
推荐指数
3
解决办法
2万
查看次数

如何检查Xcode 9中的API可用性

我正在使用UserNotification仅在iOS 10中可用的框架.我正在声明一种使用此框架的方法,到目前为止,我一直在检查可用性,如下所示:

@interface MyService : NSObject
 #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000
    -(BOOL)handleWillPresentNotification:(UNNotificationContent *)notificationContent;
#endif
@end
Run Code Online (Sandbox Code Playgroud)

XCode 9 beta刚刚发布,使用此代码我收到警告

'UNNotificationContent'是部分的:在iOS 10.0中引入注释'handleWillPresentNotification:withCompletionHandler:',其可用属性为静音

问题是如何在Objective C代码中对整个方法进行注释?我知道Xcode 9引入了

if (@available(iOS 10, *)) {
    // iOS 10 ObjC code
}
Run Code Online (Sandbox Code Playgroud)

但是如何将整个方法(包括其签名)包装在其中呢?

干杯

objective-c foundation ios10

20
推荐指数
1
解决办法
1万
查看次数

如何解析不带引号的JSON字符串

我有一个JSON字符串,其中既没有引用键也没有引用值,我想将它转换为格式正确的JSON.

{basic:{0:{index:0, license:t, nameSID:n, image:"img_left", descriptionSID:t, category:r}}
Run Code Online (Sandbox Code Playgroud)

是否有可以处理它的Java库?我试过杰克逊,但它不起作用.

问候,Jan

java json

12
推荐指数
1
解决办法
5556
查看次数

带参数的单例模式

在我的iPhone应用程序中,我使用AFHTTPClient的子类来访问其余的Web服务.我希望我的所有请求都由我的API客户端的一个实例处理,因此我使用单例模式.

当服务仅在一次URL上运行时,这可以正常工作.我可以使用常量值来设置URL.

现在,在应用程序的最终版本中,每个应用程序实际上将与将安装在公司网络中的另一个服务进行通信.

所以我将从远程配置中获取服务URL.单身人士模式在这里仍然是一个不错的选择吗?如果URL在应用程序的运行时间实际上甚至可以更改,我应该如何参数化?

干杯

#import "FooAPIClient.h"
#import "AFJSONRequestOperation.h"

static NSString * const kFooAPIBaseURLString = @"http://192.168.0.1";

@implementation FooAPIClient

+ (instancetype)sharedClient {
    static FooAPIClient *_sharedClient = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:kFooAPIBaseURLString]];
    });

    return _sharedClient;
}

- (id)initWithBaseURL:(NSURL *)url {
    self = [super initWithBaseURL:url];
    if (!self) {
        return nil;
    }

    [self registerHTTPOperationClass:[AFJSONRequestOperation class]];
    [self setDefaultHeader:@"Accept" value:@"application/json"];

    return self;
}

@end
Run Code Online (Sandbox Code Playgroud)

design-patterns objective-c

9
推荐指数
1
解决办法
2987
查看次数

UITableView heightForHeaderInSection不起作用

我有一个简单的UITableView(这里是示例项目)但是节标题不符合我在设置的高度heightForHeaderInSection

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 40;
} 
Run Code Online (Sandbox Code Playgroud)

表视图如下所示.1节标题具有正确的高度,但不具有其他标题.

在此输入图像描述

当我使用Reveal应用程序检查视图时,似乎在该部分的最后一个单元格后面有一种页脚.

在此输入图像描述

我究竟做错了什么?

uitableview ios

9
推荐指数
2
解决办法
1万
查看次数

从应用程序扩展链接到嵌入式框架

我有一个项目

  • 一个应用目标: MyApp
  • 一个嵌入式框架目标: MyKit.framework
  • 一个应用扩展目标: MyExtension

这是一个示例项目.

我想使用的共享代码MyKitMyExtension,但是当我联系了,我得到的警告

ld: warning: linking against a dylib which is not safe for use in application extensions: /Users/me/Library/Developer/Xcode/DerivedData/MyApp-dnztzmxjghjlsteetlokzhjtjqkm/Build/Products/Debug-iphonesimulator/MyKit.framework/MyKit
Run Code Online (Sandbox Code Playgroud)

Apple的文档说

要配置应用程序扩展目标以使用嵌入式框架,请将目标的"仅限应用程序扩展安全API"构建设置设置为"是".如果不这样做,Xcode会提醒您这样做,方法是显示警告"链接到dylib并不安全,无法在应用程序扩展中使用".

默认情况下正确设置.我可以通过将"仅限App-Extension-Safe API"设置为NO来消除警告,但这可能会导致某些应用程序被拒绝.

该框架不使用应用程序扩展中不允许的任何API.实际上,在示例项目中,您将看到MyKit.framework仅将消息记录到控制台.

从应用程序扩展链接到嵌入式框架的正确方法是什么,以避免这种错误?

xcode ios ios-frameworks ios-app-extension xcode8

9
推荐指数
1
解决办法
4587
查看次数

SwiftUI NavigationLink 自行弹出

我有一个简单的用例,其中一个屏幕使用NavigationLink. iOS 14.5 beta (1, 2, 3) 有一个奇怪的行为,推送的屏幕在被推送后就弹出。

我设法创建了一个示例应用程序,并在其中重现它。我相信原因是存在@Environment(\.presentationMode)似乎重新创建视图并导致弹出视图的原因。

完全相同的 cod 在 Xcode 12 / iOS 14.4 中运行良好

在此处输入图片说明

这是一个示例代码。

import SwiftUI

public struct FirstScreen: View {
    public init() {}
    public var body: some View {
        NavigationView {
            List {
                row
                row
                row
            }
        }
    }
    private var row: some View {
        NavigationLink(destination: SecondScreen()) {
            Text("Row")
        }
    }
}

struct SecondScreen: View {

    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>

    public var body: some View {
        VStack(spacing: 10) {
            NavigationLink(destination: …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationlink

7
推荐指数
4
解决办法
1047
查看次数

Swift中的FBGraphUser

我使用Facebook的iOS SDK中斯威夫特访问Facebook和我愿与工作FBGraphUser(或FBGraphPlace,FBGraphLocation)协议,而不是一个纯粹的Dictionary.请求成功完成但我无法将结果转换为FBProtocol

FBRequestConnection.startForMeWithCompletionHandler { (connection: FBRequestConnection!, result: AnyObject!, error: NSError!) -> Void in
     // this does not work
    if let fbGraphUser = result as? FBGraphUser {
        NSLog("\(fbGraphUser)")
    }

     // this works
    if let fbGraphUserDict = result as? Dictionary<String, AnyObject>{
        println("\(fbGraphUserDict)")
    }
}
Run Code Online (Sandbox Code Playgroud)

我该怎么解开选项以获取FBxxxx对象?

干杯

facebook ios fb-graph swift

6
推荐指数
0
解决办法
364
查看次数

如何将静态库嵌入到 iOS 框架中?

我正在使用iOS-Universal-Framework XCode模板来创建 MyFramework。它工作正常,当我将 MyFramework 添加到 MyApplication 时,我可以按预期访问 MyFramework 的公共对象。

我的问题是我现在将 MyFramework 与其他静态库链接起来:MailCore本身与来自iOSPorts 的一些库链接。当我编译 MyProject 时,它失败了,因为链接器找不到 MailCore 静态库。

可以将所有 MailCore 库导入 MyApplication 中,但这不是我想要的。如何将这些库嵌入到 MyFramework 中?

编辑:重新表述问题。如果 MyApplication 使用 MyFramework 而 MyFramework 使用 libCrypto.a,我是否必须将 MyApplication 链接到 libCrypto?iOS-Universal-Framework XCode声称 I MyFramework 应该嵌入该库,而 MyApplication 确实只需要链接到 MyFramework 但它对我不起作用。

谢谢

frameworks objective-c

5
推荐指数
1
解决办法
2672
查看次数