我希望能够通过shell脚本完全自动化打包应用程序(在Xcode中)的过程,我希望发布的zip存档可以在bitbucket上下载.有没有办法以编程方式在bitbucket上下载(zip)文件作为下载?
当我使用subversion作为应用程序的代码时,我可以将一个句点和结果附加svnversion到版本号以创建一个唯一且单调递增的版本号,并且还可以保证任何签出的相同修订版本代码将生成相同的版本号.
在Mercurial中,由于修订号在克隆之间不一定一致,因此本地修订号不适用.散列是适当唯一且一致的,但不会创建单调增加的数字.如何根据Mercurial存储库提交生成适当的数字以附加到版本号?
编辑: 我有一个具有自动更新检查的应用程序,该应用程序依赖于版本号,该版本号是一系列以句点分隔的整数,以确定版本是否更新.在发布之间的时间里,我有一些用户在尝试测试版本.通常,这些构建解决了测试人员遇到的问题,因此测试人员停止使用已发布的版本并切换到测试版本.我在将额外组件添加到版本号时的最初目标是:
例如,0.5.0版本的版本号为0.5.0.410; 在0.5.1发布之前,有版本号为0.5.1.411,0.5.1.420和0.5.1.421的测试版本; 然后,0.5.1版本的版本号为0.5.1.423.
我从文档和这个答案中的理解是,如果数据存在,NSManagedObjectContext existingObjectWithID:error:和objectWithID:方法应返回相同的对象,但是当数据不存在时,existingObjectWithID:error:将返回nil同时objectWithID:返回具有错误而不是数据的对象.
我在应用程序中看到的是一个实例,其中(在子管理对象上下文中的后台线程上创建对象并保存,然后转到主线程,保存并将对象ID从子上下文带到父对象上下文),existingObjectWithID:error:返回nil,但objectWithID:返回具有有效数据的实际可用对象,而不是故障.
我对这两种方法的理解不正确吗?难道我做错了什么?
(我想要nil返回-when-there-no-data行为existingObjectWithID:error:,但是无法获取新创建的对象的数据是有问题的.)
编辑:我想我可以使用objectWithID:,然后立即测试访问try-catch块中返回对象的属性,捕获抛出的异常,并替换伪造的对象nil(如此处所做),但try-catch是昂贵的Objective-C这似乎是一个非常糟糕的主意.
对于调试日志记录,我经常看到并使用类似的东西
#ifdef DEBUG
    #define DLOG(fmt, args...) printf("%s:%d "fmt,__FILE__,__LINE__,args)
#else
    #define DLOG(fmt, args...)
#endif
但在很多地方,我看到第二个#define被替换了
#define DLOG(fmt, args...) do {} while (0)
特别是,有这个答案,对同一问题的另一个答案的评论表明,问题将出现在像
if (condition)
    DLOG("foo");
虽然我的快速测试表明,行中产生的分号本身将作为条件内的无操作语句.
是一个或其他的什么和do {} while (0)好?如果是这样,为什么?还有其他更好的东西吗?
我的理解是,在 OSX 10.7 中不推荐使用 OpenSSL 以支持 Common Crypto,但我似乎无法很好地处理如何从 OpenSSL 代码转换到 Common Crypto 代码。特别是,我正在查看带有 ValidateStoreReceipt 的 App Store 收据验证。我首先尝试找到一种方法来获取 PKCS#7 容器的内容,这似乎是 中的第一步dictionaryWithAppStoreReceipt,但我找不到任何有关如何执行此操作的文档。
是否可以重写此代码以便不依赖于 OpenSSL?如果是这样,如何?是否有我错过的文档或教程?
我在NSView子类中有以下代码:
- (id)forwardingTargetForSelector:(SEL)aSelector
{
    if ([super respondsToSelector:@selector(forwardingTargetForSelector:)]) {
        // cast to (id) to avoid "may not respond to selector" warning
        return [(id)super forwardingTargetForSelector:aSelector];
    } else {
        [self doesNotRecognizeSelector:aSelector];
        return nil;
    }
}
在第一行中,return [(id)super ...转换super为id因为在GCC编译器下,这抑制了超类(NSView)可能不响应的警告,如此答案中forwardingTargetForSelector:所建议的那样.
但是,当我切换到LLVM编译器时,这会导致"无法强制转换"错误.是否有正确的方法来修改我的代码,以便在LLVM和GCC下既没有警告也没有错误?
假设我有一个anInstance具有属性的类的实例aProperty.当我anInstance.aProperty在块中使用时,块是否捕获(指针)值,anInstance然后将aProperty消息发送到捕获的(指针)值,或者块只捕获值anInstance.aProperty?
我决定学习并发性,并希望了解来自两个不同进程的指令可以重叠的方式.两个进程的代码只是一个10迭代循环,在每次迭代中执行3条指令.我想出了一个问题,包括将X指令固定在一个点,然后在空间之间安装来自另一个进程的其他X指令,同时考虑到它们必须被排序(进程B的指令4必须总是在指令20之前).
我编写了一个程序来计算这个数字,查看结果我发现解决方案是n组合k,其中k是在一个过程的整个循环中执行的指令数,因此对于10次迭代,它将是30,并且n是k*2(2个过程).换句话说,n个固定的n个对象并且必须在空间中拟合n/2而没有后者n/2失去它们的顺序.
好的问题解决了.不,不是真的.我不知道为什么会这样,我明白组合的定义是,你可以用多少种方式从一组n中取k个元素,这样所有的组都是不同的,但你采用这些元素的顺序并不是'无所谓.在这种情况下,我们有n个元素,我们实际上是全部,所有指令都被执行(n C n).
如果一个人说,有2K蓝色(A)和红色(B)解释了它在一个袋子对象,你从包里取k个对象,你仍然只有k取指令时,2K指令实际执行.你能否对此有所了解?
提前致谢.
objective-c ×2
bitbucket ×1
c ×1
cocoa ×1
commoncrypto ×1
concurrency ×1
core-data ×1
ios5 ×1
llvm ×1
macos ×1
macros ×1
math ×1
mercurial ×1
openssl ×1
osx-lion ×1
shell ×1
superclass ×1
versioning ×1