小编Cra*_*tis的帖子

iPhone App Store问题

我在App Store中有一个iPhone应用程序.我几天前向应用程序商店提交了1.1,并选择了"Hold for Developer Release".我发现批准的版本中存在一个非常严重的错误.我需要拉这个二进制文件.

据我所知,Apple并不支持这一点.我已经给他们发了一封电子邮件,但当前版本中还有另一个需要修复的错误,所以时间至关重要.

我听说你可以在一个随机的国家(我没有销售)发布更新,然后在所有国家发布下一个(固定的)更新.如果我只在卢森堡发行1.1版,是从其他商店撤出的旧版本(1.0)吗?图表评级是否重置?我在图表中相对较高,我不想失去应用程序目前的动力.

在Apple支持拒绝批准的二进制文件之前,我正在寻找最快的替代方案.

iphone itunesconnect app-store

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

将NSString转换为用于XML序列化的Base64数据

我使用Apple的NSXMLParser类来加载数据.我有一个单独的框架来序列化我的数据.

我已经有足够的长字符,Word引号等出现在我的XML输出中并在解析时导致错误,这通常会导致数据丢失,因为解析器对这些字符的处理不当.

如果我将用户的输入作为NSString对象,我想将其转换为Base64(我有一个实用工具方法),然后将这些字节写入XML文件,代替NSString.我知道这可能会占用更多空间,但至少我不再需要处理验证问题了.

我的问题是,如何将NSData字节(看起来像<8d72...>在NSLog语句中)转换为NSString,而不使用编码来获取原始值.我希望将那些出现在日志语句中的实际字节转换为NSString.最后(加载此序列化数据时),如果您有NSString:

NSString *loadedData = @"8d72...";
Run Code Online (Sandbox Code Playgroud)

如何从这种形式转变为人类可读的格式?整个编码过程对我来说有点难以理解,但我认为这是确保在我的XML文件中正确保留奇怪的用户输入的一种非常可靠的方法.

xml cocoa encoding parsing objective-c

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

什么时候sizeof(int)在Objective-C中不是4个字节?

我正在使用一个开源网络框架,使开发人员可以通过Objective-C中使用Bonjour的服务轻松进行通信.

现在有几行让我处于边缘状态,即使他们似乎从来没有在我测试的任何机器上造成任何问题,无论我是否运行32位64位版本我的申请:

int packetLength = [rawPacketData length];
[outgoingBuffer appendBytes:&packetLength length:sizeof(int)];
[outgoingBuffer appendData:rawPacketData];
[self writeToStream];
Run Code Online (Sandbox Code Playgroud)

请注意,发送的第一条信息是数据包的长度,这是非常标准的,然后发送数据本身.令我害怕的是长度的长度.一台机器是否假设一个int是4个字节,而另一台机器认为一个int是8个字节?

如果两种尺寸在不同的机器上可能不同,会导致什么?它取决于我的编译器还是最终用户的机器架构?最后,如果它是一个问题,我怎么能采用一个8字节的int并将其缩小到4字节以确保向后兼容?(因为我永远不需要超过4个字节来表示数据包的大小.)

iphone macos networking cocoa objective-c

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

Xcode 4中"My Mac 32-bit"和"My Mac 64-bit"之间的区别?

我有一个Cocoa项目,我最近导入到Xcode 4.我注意到每个特定构建目标的两个Scheme,一个用于32位,一个用于64位.我的项目设置设置为"标准(32/64位英特尔)".

当我选择"我的Mac 32位"方案时,是否为32位计算机编译它,并选择"我的Mac 64位",然后为64位计算机编译它?如果我选择"我的Mac 64位"方案,它将不再在32位机器上运行吗?

在此输入图像描述

macos 64-bit xcode xcode4

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

NSFileVersion期间的EXC_BAD_ACCESS调用removeOtherVersionsOfItemAtURL:内部协调写入块

我正在使用似乎是在协调写入块内部的NSFileVersion类方法的简单调用来removeOtherVersionsOfItemAtURL:进行某些iCloud冲突解决.

当我的设备进入"spaz模式"时,这是在少数设备上反复打开和关闭应用程序的技术术语,EXC_BAD_ACCESS内部会抛出异常.代码段:

- (void)compareVersionChanges:(NSFileVersion *)version {
    if (![DataLoader iCloudPreferenceEnabled]) {
        NSLog(@"Ignoring iCloud changes (version comparison) based on user preference");
        return;
    }
    NSLog(@"compareVersionChanges");
    dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(aQueue, ^(void) {
        NSError *readError = nil;
        NSFileCoordinator *coordinator = [[NSFileCoordinator alloc] initWithFilePresenter:(id)self];
        [coordinator coordinateReadingItemAtURL:[version URL] options:0 error:&readError byAccessor:^(NSURL *newURL) {
            DataContext *loadedContext = nil;
            NSData *data = [NSData dataWithContentsOfURL:newURL];
            NSError *e = nil;
            loadedContext = [self convertXmlDataToContext:data error:&e];
            if (e) {
                NSLog(@"Done loading, error: …
Run Code Online (Sandbox Code Playgroud)

xcode objective-c ios

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

基于Java中的共享密钥保护数据的创新/安全方法

我一直在尝试Java中的一些基本加密技术(我的首选编程语言),并有一个简单的例子,它使用模幂运算在两个客户端对之间生成共享密钥.

但是,考虑到共享的秘密,实际使用这个秘密加密/解密或加密/解密通过线路发送的数据有哪些简单实现(但是安全)的方法?

例如,如果我有字符串:

"So long, and thanks for all the fish"
Run Code Online (Sandbox Code Playgroud)

和共享的秘密(BigInteger):

1110278255331388386297296974141977
Run Code Online (Sandbox Code Playgroud)

如何通过线路以一种允许客户互相理解的方式发送字符串,同时确保没有共享秘密,没有中间人可以解释它?

我不是要求完成实现,只是想法或对可以使用的算法/技术的参考.我也避免依赖现有的程序或API(如公钥/私钥),因为这只是我自己教育目的的一个副项目.

java encryption cryptography

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

OCMock"预期的方法没有被调用",即使我自己称之为

我正在尝试在iOS项目中设置一个简单的OCMock单元测试,只是为了熟悉框架.

我有一个模拟的DataLoader类,即使我自己调用这个方法,我的期望也会失败:

- (void)testSimpleMocking {
    // Mock the class
    id mock = [OCMockObject niceMockForClass:[DataLoader class]];

    // Override the 'dispatchLoadToAppDelegate:' to be a no-op
    [[[mock stub] andReturn:nil] dispatchLoadToAppDelegate:[OCMArg any]];

    // Expect the method to be called
    [[mock expect] dispatchLoadToAppDelegate:[OCMArg any]];

    // Call the method
    [mock dispatchLoadToAppDelegate:nil];

    // Verify
    [mock verify];
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此测试时,我收到错误:

/Users/Craig/projects/MyApp/Unknown.m: -[MockingDataLoaderTest testSimpleMocking] : OCMockObject[DataLoader]:
expected method was not invoked: dispatchLoadToAppDelegate:<OCMAnyConstraint: 0x1a3d890>
Run Code Online (Sandbox Code Playgroud)

当我自己调用这个方法时,这怎么可能?

编辑:一个更复杂的案例:

- (void)testDataLoaderWaitsForDownload {
    id mock = [OCMockObject niceMockForClass:[DataLoader class]];
    id metadataItem = …
Run Code Online (Sandbox Code Playgroud)

cocoa unit-testing mocking ocmock ios

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

为iCloud和UILocalNotification更新安排iOS后台任务

我想在我的应用程序中实现通知.该应用程序通过iCloud共享数据,通知保存 iCloud共享数据中.(这是一个鞋盒应用程序.)

不幸的是,我没有资源来支持推送通知.

根据这份文件:

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/WhatAreRemoteNotif.html#//apple_ref/doc/uid/TP40008194-CH102-SW1

OS X中针对非运行应用程序的唯一推送通知类型是图标标记.

这仍然是这样吗?如果是这样,那没关系 - 我正在运行的 Mac应用程序已经能够(1)检测iCloud更改,(2)确定新的本地通知是否需要调度或现有的需要更新,以及(3)调度它们.所以添加推送支持并不是我想要的.

但是 - 我想知道如何从iOS方面解决这个问题.如果我在Mac上安排通知,并将其保存到iCloud,iOS上的应用程序如何在后台收到通知?

如果iOS应用程序在前台,我可以确认一切正常.收到iCloud通知,加载数据,重新安排通知.

但是如果我的应用程序在后台运行,或者根本没有运行,那么处理这个问题的最佳方法是什么?我理解后一种情况是我很可能无法控制的情况.但如果应用程序在后台,我会:

  1. 是否需要生成后台任务以定期检查数据更改?要么,

  2. 是否有可以订阅的通知,只有在iCloud数据发生变化时才会通知我?

我找到了它的fetch价值UIBackgroundModes,但我不确定这是我想要的 - 我不是在取得,我只是想在后台回应iCloud的变化.

iphone cocoa objective-c ios uilocalnotification

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

当“相等”意味着“顺序无关紧要”时,如何编写传递比较器?

我有一组序列化到文件的项目。有些项目可以依赖其他项目,但不允许循环引用。因此,它们需要以某种方式进行序列化,如果A依赖于BB则首先在文件中进行序列化。

我写了我的Comparator,它使用一个reliesOn()函数来确定两个项目是否链接:

Collections.sort(itemsToSort, new Comparator<Item>() {
    @Override
    public int compare(Item first, Item second) {
        boolean firstReliesOnSecond = reliesOn(first, second);
        if (firstReliesOnSecond) {
            return 1;
        }
        boolean secondReliesOnFirst = reliesOn(second, first);
        if (secondReliesOnFirst) {
            return -1;
        }
        return 0;
    }
});
Run Code Online (Sandbox Code Playgroud)

这适用于某些情况,但不是全部。在调试中,很明显排序依赖于 的传递性质Comparator,并且可以理解不会比较所有可能的项目配对。

例如,有五个项目A通过E,如果:

A -> B
B -> E
C
D
E
Run Code Online (Sandbox Code Playgroud)

那么一种可能的排序是:

E, B, A, C, D
Run Code Online (Sandbox Code Playgroud)

至少,E …

java sorting transitivity comparator

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

使用 IntelliJ IDEA 构建 Gradle 多模块的正确结构

我有一个 Kotlin 项目,它由三个模块组成:

Core < Service < Web
Run Code Online (Sandbox Code Playgroud)

结构是:

build.gradle
core/
    build.gradle
service/
    build.gradle
web/
    build.gradle
Run Code Online (Sandbox Code Playgroud)

build.gradle文件的结构是:

buildscript {
    ext.kotlin_version = '1.1.60'
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
subprojects {
    apply plugin: 'kotlin'
    apply plugin: 'jacoco'
    compileKotlin {
        kotlinOptions.jvmTarget = '1.8'
    }
    repositories {
        mavenCentral()
        jcenter()
    }
}
Run Code Online (Sandbox Code Playgroud)

各个构建文件看起来像(对于core):

dependencies {
    // Kotlin
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
    ...
}
Run Code Online (Sandbox Code Playgroud)

而对于service(注意唯一的区别是项目依赖):

dependencies {
    compile project (':core')
    // Kotlin
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
    ...
} …
Run Code Online (Sandbox Code Playgroud)

intellij-idea gradle kotlin

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