我正在将已弃用的通讯簿框架中的应用程序迁移到新的"联系人框架".该应用程序使用ABAddressBookRegisterExternalChangeCallback时,另一个应用程序更改联系人通知.
我无法在Contacts Framework中找到相同的功能.苹果文件说,将使用与默认通知中心的CNContactStoreDidChangeNotification通知:
在另一个更改发生时发布通知
CNContactStore.
根据Apple的建议,我的代码如下:
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "contactsChanged:",
name: CNContactStoreDidChangeNotification,
object: nil)
Run Code Online (Sandbox Code Playgroud)
但是,我发现这种方法存在两个问题:
如果我在我的应用程序中进行更改时记录通知的调试描述,我会得到如下内容:
NSConcreteNotification 0x7d3370e0 {name = CNContactStoreDidChangeNotification; userInfo = {
CNNotificationOriginationExternally = 1;
CNNotificationSourcesKey = (
);
}}
Run Code Online (Sandbox Code Playgroud)
如果更改是在外部进行的:
NSConcreteNotification 0x7bf7a690 {name = CNContactStoreDidChangeNotification; userInfo = {
CNNotificationOriginationExternally = 1;
CNNotificationSourcesKey = (
);
}}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,没有什么明显可以区分它们.
任何人都可以告诉我如何从联系人框架中获得相同的行为,因为人们可以得到ABAddressBookRegisterExternalChangeCallback?
我在App Store中有一个Android应用。它在后端使用Firebase,并通过Facebook(和Google)提供社交登录。
最近,Facebook联系我,警告我通过Facebook登录时我的应用程序崩溃/无响应。感到困惑,我开始进行一些测试。
我发现,如果我在未安装Facebook应用程序的情况下使用Facebook登录名,则一切运行正常。向用户显示一个浏览器窗口,可以登录,他们被重定向回我的应用程序,并且我具有他们的身份。当然,我在开发过程中发现了所有这些内容,但只是想确认一切仍然正常。
但是,当我安装Facebook应用程序时(在开发过程中我忽略了这一点),我发现它不再起作用。而是,用户被重定向到此页面:
为了便于搜索和访问,该图像中的文字为:
登录错误:将您登录到此应用程序时出错。请稍后再试。
发生这种情况时,我已经检查了日志,发现以下内容可能相关,但我不确定:
07-05 15:36:28.468 908 5828 I ActivityManager: START u0 {act=NATIVE_WITH_FALLBACK cmp=<<redacted>>/com.facebook.FacebookActivity (has extras)} from uid 10264
07-05 15:36:28.469 665 665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:28.470 665 665 D QCOM PowerHAL: Activity launch hint handled
07-05 15:36:28.495 4837 4837 W ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@e64bd3e
07-05 15:36:28.689 665 665 D QCOM PowerHAL: LAUNCH HINT: OFF
07-05 15:36:28.946 29406 4941 W fb4a.BlueServiceQueue: Exception during service
07-05 15:36:28.946 29406 …Run Code Online (Sandbox Code Playgroud) android facebook facebook-authentication firebase firebase-authentication
我很难理解以下测试不起作用的原因:
[Fact]
public void repro()
{
var scheduler = new TestScheduler();
var count = 0;
// this observable is a simplification of the system under test
// I've just included it directly in the test for clarity
// in reality it is NOT accessible from the test code - it is
// an implementation detail of the system under test
// but by passing in a TestScheduler to the sut, the test code
// can theoretically control the execution of …Run Code Online (Sandbox Code Playgroud) 现在让我解决这个问题:是的,不使用Core Data几乎肯定是错误的.但是,当我做出这些决定时,我是iOS开发的新手,我不知道我会像这样陷入困境.此外,该应用程序也打算在Android(最终)上运行,因此我尽可能避免使用特定于平台的API.
我有一个iOS应用程序,可以将数据存储在本地SQLite数据库文件中.存储在文件中的数据由用户提供,因此保持安全非常重要.我有计划"稍后再做",后来现在在这里.我很快意识到它不会像我希望的那样直截了当......
我现在明白,无法跨设备无缝同步数据,我愿意接受这个限制,直到我设法迁移到Core Data.但是,与此同时,我至少要定期备份SQLite数据库,这样用户可以在单个设备上使用该应用程序感到安全.我以为我会这样做:
这种方法的最大问题是用户可以在多个设备上运行应用程序,因此存储在iCloud中的数据可以来自这些设备中的任何一个,但只有一个.为了解决这个问题,我想我可以在云存储中使用每个设备的唯一名称.我会生成这个使用UIDevice.identifierForVendor.
所以我的启动逻辑是:
本地文件是丢失还是损坏,如果是,云文件是否存在?
2.1.询问用户是否要从云文件中恢复.使它真的很难让他们说没有,因为这样做会失去他们的所有数据.
2.2.如果他们说是,请将云文件复制到本地文件存储.
在后台运行我偶尔会将数据库文件从本地复制到云存储.
在我进行核心数据集成之前,我想知道这是否是一种合理的方法.还有,我可能会遗漏任何隐藏的"陷阱"吗?
更新:正如@TomHarrington在评论中指出的那样,我的数据库文件已经存在/Documents,它已备份到iTunes和任何iCloud帐户.所以我的问题变成了这样:
我是否应该简单地确保我的数据库具有特定于设备的名称,以便在连接到同一iCloud帐户的另一台设备上运行的应用程序不会破坏它?
我正在尝试az针对我的 Azure 帐户使用。我的帐户有两个目录:一个用于个人(默认)和一个用于企业。我需要“切换到”业务目录,以便可以az访问正确的资源。但是,我找不到通过命令行实现此目的的任何方法,因此当我这样做时,我会az group list从我的个人目录中看到资源组,而不是业务组。
如何从 CLI 切换 Azure 目录?
我的应用程序图标已基本上是一个圆圈.Android坚持将其放入另一个圈子会产生非常难看的结果,所以我试图找出如何告诉它的行为.
例如,如果我的图标是(并且这不是我的实际图标,但这无关紧要):
然后Android呈现如下:
注:内容外圈内是非常重要的.没有这个,Android似乎明白我的图标已经是圆形的,不应该包裹在另一个圆圈中.
我已经看到了这个问题和答案,但我对行为和提议的修复对我没有用的事实感到困惑.
当我运行Image Asset Studio工具生成图标时,我会经历选择遗产并让它看起来完全符合我想要的过程,然后单击"完成"......没有任何反应.没有生成任何图像.我知道这是因为我看到git没有检测到任何变化,我的应用程序的图标图像也没有任何不同.
我的gradle包括:
compileSdkVersion 27
minSdkVersion 16
targetSdkVersion 27
任何人都可以告诉我如何让Android了解我的图标仍然基本上是一个圆圈?当然,它在圆圈之外有一些内容,但它仍然在包围圆圈的方形范围内......
我想将 AutoMapper 与 proto3 一起使用,但我遇到的最大问题是从可能允许的源属性映射null到从不允许的原型。手动进行此类填充时,必须执行以下操作:
var proto = new Proto();
if (source.Field != null)
{
proto.Field = source.Field;
}
Run Code Online (Sandbox Code Playgroud)
我仍然觉得这很荒谬,但 proto3 显然就是这样。
无论如何,这意味着映射必须有条件,以确保null值不会传播到原型:
config
.CreateMap<Source, Proto>()
.ForMember(
x => x.Field,
options => options.Condition(source => source.Field != null));
Run Code Online (Sandbox Code Playgroud)
我能感觉到它变老的速度非常快,因为我的原型中有很多属性。
我想知道是否有办法让我在更高的抽象级别上处理这个问题?
我正在尝试Visual Studio的Kubernetes工具。我想在控制台应用程序上启用Kubernetes支持,但它不允许我这样做。它似乎仅支持ASP.NET应用程序(Web / API)。
为什么是这样?
我的项目由许多支持gRPC端点进行通信的控制台程序组成。为什么该工具似乎仅能促进ASP.NET?有办法解决吗?
我有一些 C 代码来渲染一些 OpenGL 内容,它可以在 Android 和 iOS 上运行。在 Android 上看起来不错。但在 iOS 上它是垂直翻转的。
下面是一些简单的代码来演示(因为OpenGL C代码很啰嗦,所以只复制了相关部分):
GLfloat vVertices[] = {
0.0f, 0.5f,
-0.5f, -0.5f,
0.5f, -0.5f
};
glViewport(0, 0, context->width, context->height);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(data->programObject);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, vVertices);
glEnableVertexAttribArray(0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);
Run Code Online (Sandbox Code Playgroud)
在 Android 上它看起来像这样:
但在 iOS 上它看起来像这样:
两个平台之间唯一的区别是 OpenGL ES 的初始化代码,因为所有 OpenGL 代码都是共享的 C 代码。但是,我看不出初始化代码有任何明显的错误。
这是初始化代码(我删除了大部分错误处理,因为除了我留下的错误之外,没有任何错误被触发):
- (void)initGL {
_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
[EAGLContext setCurrentContext:_context];
[self createCVBufferWithSize:_renderSize withRenderTarget:&_target withTextureOut:&_texture];
glBindTexture(CVOpenGLESTextureGetTarget(_texture), CVOpenGLESTextureGetName(_texture));
glTexImage2D(GL_TEXTURE_2D, // target
0, …Run Code Online (Sandbox Code Playgroud)