我正在尝试代表我的一个客户提交现有应用程序的更新,并且我从iTunes Connect收到"无效二进制"失败,但没有解释错误.我将在明天没有网络访问的情况下离开2周的假期,所以我有点绝望的解决方案.任何见解都非常感谢.
此更新更改了应用程序的名称并修复了一些小错误.我之前通过iTunes Connect提交了提交内容,但我正在通过Xcode提交此更新,正如Apple现在所要求的那样.
我将自己设置为此客户端的技术联系人,因此当我通过iTunes Connect将新版本置于"等待上传"状态时,我会收到通知.当我通过Xcode组织器验证二进制文件时,该工具最终报告二进制文件是有效的.当我通过Xcode组织器提交二进制文件时,它最终会回来并说二进制文件已成功上传.这两个步骤都需要一段时间(可能每个15分钟),可能是因为应用程序包是63兆字节,有数千个资源.
在接下来的一两个小时内,iTunes Connect门户仍会报告应用程序处于"等待上传"状态.我相信在Xcode上传完成和iTunes Connect状态更改之间有一些延迟是正常的.这些小时的延迟似乎过多,但考虑到应用程序的大小,我认为并不完全令人惊讶.
最终状态只是默默地更改为iTunes连接中的"无效二进制".我知道iTunes Connect应该发送一封电子邮件来解释发生这种情况时的错误,但是我没有收到任何东西,我的客户也没有.(我认为它应该向所有标记为iTunes Connect中应用状态更改通知的用户发出.这个假设是正确的吗?)
以下是从App Store Distribution配置中复制和粘贴的构建设置:
ADDITIONAL_SDKS =
ARCHS = $(ARCHS_STANDARD_32_BIT)
SDKROOT = iphoneos4.0
ONLY_ACTIVE_ARCH = YES
VALID_ARCHS = armv6 armv7
SYMROOT = /Users/cduhn/Documents/workspace/xcode_build_output
OBJROOT = $(SYMROOT)
CONFIGURATION_BUILD_DIR = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
CONFIGURATION_TEMP_DIR = $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
SHARED_PRECOMPS_DIR = $(CACHE_ROOT)/SharedPrecompiledHeaders
BUILD_VARIANTS = normal
DEBUG_INFORMATION_FORMAT = dwarf-with-dsym
ENABLE_OPENMP_SUPPORT = NO
GENERATE_PROFILING_CODE = NO
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = YES
RUN_CLANG_STATIC_ANALYZER = NO
SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = NO
VALIDATE_PRODUCT = NO
CODE_SIGN_ENTITLEMENTS = Entitlements.plist
CODE_SIGN_IDENTITY =
CODE_SIGN_IDENTITY[sdk=iphoneos*] = iPhone Distribution: Capturing Moments …Run Code Online (Sandbox Code Playgroud) 每当我在自己的代码中实现一个可以接受或返回多个类的对象的方法时,我总是尝试使用最具体的超类.例如,如果我要实现一个可能根据其输入返回NSArray*或NSDictionary*的方法,我会给该方法一个返回类型的NSObject*,因为那是最直接的常见超类.这是一个例子:
@interface MyParser()
- (BOOL)stringExpressesKeyValuePairs:(NSString *)string;
- (BOOL)stringExpressesAListOfEntities:(NSString *)string;
- (NSArray *)parseArrayFromString:(NSString *)string;
- (NSDictionary *)parseDictionaryFromString:(NSString *)string;
@end
@implementation MyParser
- (NSObject *)parseString:(NSString *)string {
if ([self stringExpressesKeyValuePairs:string]) {
return [self parseDictionaryFromString:string];
}
else if ([self stringExpressesAListOfEntities:string]) {
return [self parseArrayFromString:string];
}
}
// etc...
@end
Run Code Online (Sandbox Code Playgroud)
我已经注意到在Foundation和其他API中的许多情况,其中Apple在某些方法签名中使用(id)时(NSObject*)会更精确.例如,这是NSPropertyListSerialization的方法:
+ (id)propertyListFromData:(NSData *)data
mutabilityOption:(NSPropertyListMutabilityOptions)opt
format:(NSPropertyListFormat *)format
errorDescription:(NSString **)errorString
Run Code Online (Sandbox Code Playgroud)
此方法可能的返回类型是NSData,NSString,NSArray,NSDictionary,NSDate和NSNumber.在我看来,返回类型(NSObject*)将是一个比(id)更好的选择,因为调用者将能够调用NSObject方法,如retain而不使用类型转换.
我一般都试图模仿官方框架所建立的习语,但我也想了解是什么激励了他们.我确信Apple在这种情况下使用(id)有一些正当理由,但我只是没有看到它.我错过了什么?
我在XCode中创建了一个静态库,需要几个动态库(例如libsqlite3.0.dylib).我可以使用XCode中的跨项目引用创建依赖于我的静态库的应用程序,但似乎我必须手动将所有必需的动态库添加到我的每个应用程序项目中以使它们链接.
有没有办法在XCode中配置静态库项目,以便依赖的应用程序将自动链接到它需要的任何动态库?
我尝试将动态库添加到我的静态库项目中的Frameworks列表中,但这似乎没有任何效果.
我创建了一个全新的基于视图的项目并添加到viewDidLoad中
- (void)viewDidLoad
{
[super viewDidLoad];
myField = [[UITextField alloc] initWithFrame:CGRectMake(50, 50, 150, 31)];
myField.delegate=self;
[self.view addSubview:myField];
[myField release];
}
Run Code Online (Sandbox Code Playgroud)
我的头文件是
@interface textfieldpracticeViewController : UIViewController<UITextFieldDelegate>{
UITextField *myField;
}
Run Code Online (Sandbox Code Playgroud)
当我点击文本字段并弹出键盘时,我开始输入但是在第二个字符上,我得到了exc_bad_access错误.我使用NSZombieEnabled,NSDebugEnabled,MallocStackLoggin和MallocStackNoCompact运行它,但它们无法捕获错误.
这在使用iphone 4.3模拟器时失败,但是当我在iphone上构建它时工作正常.这是一个xcode错误还是我错过了什么?
谢谢
PS甚至尝试过财产/合成废除
我想分享我执行的测试方案的信息,并要求您分享您在区域监控方面的经验.所以,我已经注册了两个相对的区域(A和B),半径为5公里,距离为1公里,距离为20公里.但是,从A到B旅行时,我没有收到任何didEnterRegion/didExitRegion事件.在我的app原型中,我还放了两个按钮(用于测试目的):一个开始重大更改,另一个标准位置监控.两个打印都在屏幕上记录了UpdateToLocation事件.
因此,在到达B区中心并对不可预测的功能非常恼火之后,我已经启用了重要的监控.之后,我收到了几个didUpdateToLocation,horizontalAccuracy为~8.5 km!哇,这很痛,因为我想做的就是有一个功能,用户会收到通知,他想要的地方是距他当前位置5公里半径的某个地方,我想依靠GSM单元三角形位置仅检测方法(用于保存电池).
所以,回到我的情况.在得到如此大的8公里误差后,我已经启用了具有最佳精度(GPS)的标准监控.和宾果游戏,我收到了水平准确度为399米的didUpdateToLocation事件,只有这样,我才从我的初始位置(区域A)接收到didExitRegion,并使用didEnterRegion(B)接收了另一个事件.另一个来自didUpdateToLocation的更新更准确--50米.
在以前的场景中,我的准确性也不稳定.有时水平精度有4公里,有时甚至更少.但主要的问题是,如果我们想要保留电池(Apple在文档中教我们)那么我们是否可以仅使用区域监控+ GSM而不使用GPS?有一个Apple代码示例"正确使用区域监控"(这里),但有一些不可接受的事情:
1)他们声明示例代码仅适用于iPhone4,但Apple文档声明iOS4.0 +支持区域监控和重要监控.很酷,哈?
2)示例代码使用所有3种定位方法:重要,标准,区域.它始终使用区域监控,但另外在使用标准位置时具有最佳精度.当应用程序进入后台时,它会停止标准并开始重大变更监控 当进入前景时,app停止显着并开始标准位置.似乎苹果文档非常模糊,如果我们只使用区域监控,或者我们总是使用所有三种方法,我们不清楚会得到什么惩罚(horizontalAccuracy)?
3)Apple文档声明我们需要保留电池并将其用作我们需要的最小位置服务,如果我们不需要GPS,那么我们应该使用GSM(例如,所需精度为1 - 3 km).但是示例代码使用最佳期望精度(GPS)进行区域监控和标准监控(当应用程序处于前台时).我确实理解GPS可以解决我的所有错误和准确性问题,但是仅使用GSM呢?在我的方案中获得8.5公里水平精度之后,我不确定是否可以使用区域监控,因为它无法提供至少5公里的可接受误差.
我有一个XML文档,我试图通过CSS设置样式.此XML的相关片段如下所示:
<senseBlock>
<prelim>Not numbered</prelim>
<sense>first item</sense>
<sense>second item</sense>
<sense>third item</sense>
</senseBlock>
Run Code Online (Sandbox Code Playgroud)
我需要将<sense>元素作为有序列表呈现,但前提是列表中有多个<sense>元素.在只有一个<sense>元素的列表中,我需要它显示为没有任何数字的普通段落.
现在我正在为这样的列表设置样式,但是当只有一个项目时我不知道如何隐藏数字:
senseBlock {
display: block;
counter-reset: sense;
}
prelim {
display: block;
}
sense {
display: list-item;
list-style: decimal inside;
}
sense:before {
counter-increment: sense;
}
Run Code Online (Sandbox Code Playgroud)
我想过使用相邻的选择器sense + sense来检测多个项目,但那样就不会设置列表中第一个元素的样式.我已经得出结论,如果不修改XML,这是不可能的,但我想我会在放弃之前将这个挑战扩展到社区.
这只需要在最新版本的Safari for iPhone中使用.
我想在IOS上的声音文件中播放指定的持续时间.我在AVAudioPlayer中找到了一个方法,试图开始播放(playAtTime :),但我找不到直接的方法来指定声音文件结束前的结束时间.
有没有办法实现这个目标?
您可以在NSObject.h文件中看到以下内容
// 1.这是一个协议
@protocol NSObject
Run Code Online (Sandbox Code Playgroud)
// 2.这是一个符合上述协议的接口
@interface NSObject <NSObject> {
...
Run Code Online (Sandbox Code Playgroud)
// 3.下面"()"的含义是什么?NSCoderMethods是一种协议
@interface NSObject (NSCoderMethods)
Run Code Online (Sandbox Code Playgroud)
NSObject非常重要,我需要理解,为什么它是这样设计的?