我想重定向NSog()
到文件,但仍然在控制台中看到输出.我知道stderr
可以使用以下方法重定向到文件:
freopen("file.log", "a+", stderr);
Run Code Online (Sandbox Code Playgroud)
但在将其重定向到文件后,控制台输出中不再显示日志.
我可以构建一个自定义包装器,NSLog()
但我不会得到stderr
在应用程序崩溃时写入的记录崩溃日志.
我还在尝试dup()
复制文件描述符的其他方法,但输出是文件或控制台中的ether,从不在两者中.
这里也提出了类似的问题: 在iPhone上将stderr写入文件和控制台, 但没有接受答案,或建议使用NSLog()包装器.
有没有人知道如何管理这项工作?Thanx提前.
更新:重定向最重要的部分是将系统错误日志(stderr)写入控制台和文件.
鉴于存在一个用Swift编写的ObjC兼容枚举:
// from MessageType.swift
@objc enum MessageType: Int {
case one
case two
}
Run Code Online (Sandbox Code Playgroud)
和一个MessageType
具有必须向前声明的类型属性的ObjC类:
// from Message.h
typedef NS_ENUM(NSInteger, MessageType);
@interface Message: NSObject
@property (nonatomic, readonly) MessageType messageType;
@end
Run Code Online (Sandbox Code Playgroud)
为了使用Message
Swift代码库的其余部分,将Message.h
其添加到桥接头中:
// from App-Bridging-Header.h
#import "Message.h"
Run Code Online (Sandbox Code Playgroud)
现在,假设有一个Swift类试图读取messageType
属性:
// from MessageTypeReader.swift
class MessageTypeReader {
static func readMessageType(of message: Message) -> MessageType {
return message.messageType
}
}
Run Code Online (Sandbox Code Playgroud)
编译将失败,并出现以下错误:
Value of type 'Message' has no member 'messageType'
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有办法向前声明一个Swift枚举,以便MessageTypeReader
能够访问该属性?
注意:我知道可以将消息重写为Swift或将App-Bridging-Header.h导入到Message.h中,但这不是一个选项,我正在寻找一种适用于当前设置的解决方案.
我正在使用xcodebuild命令行工具来构建iOS应用程序.
安装Xcode45-DP1后,它会自动使用新Xcode45-DP1应用程序包中的6.0 SDK来构建应用程序.将此应用程序提交到AppStore时有2个问题.
该应用程序现在使用最新的SDK(6.0)自动构建,支持注释,因此无法提交应用程序.解决方案:我将旧版SDK(5.1)复制到Xcode45-DP.app并在指定的命令行中复制-sdk iphoneos5.1
第二个问题是,当ApplicationLoader正在验证应用程序时,会看到从不受支持的Xcode版本(45-DP1)使用SDK并拒绝上传应用程序.解决方案:我想为SDK指定绝对路径,例如:xcodebuild -sdk /path/to/5.1sdk...
问题是xcodebuild总是说无法找到SDK"/path/to/iPhoneOS5.1.sdk/".
有没有人有过如何使用sdk的绝对路径以及它应该指向哪个文件/目录的经验?
提前致谢.
我正在尝试从命令行构建Xcode项目,使用iphonesimulator作为SDK.这是命令行:
xcodebuild -scheme SchemeName -configuration Debug -sdk iphonesimulator PLATFORM_NAME=iphonesimulator clean build
Run Code Online (Sandbox Code Playgroud)
但是,当我在Xcode中添加后构建操作时,如:
echo "PLATFORM_NAME: ${PLATFORM_NAME}"
Run Code Online (Sandbox Code Playgroud)
它总是输出"PLATFORM_NAME:iphoneos "而不是iphonesimulator.
这是一个错误,还是我的构建配置有问题?谢谢
我试图通过TestFlight安装AdHoc构建,但我遇到了一些奇怪的困难.下面是iOS下载二进制文件并开始安装后输出的控制台日志.关键问题是iOS表示权利与移动处理数据不匹配,但是当我比较它们时,它们匹配.
我已经仔细检查了mobileprovision,entitlemtnts.plist中的所有值,甚至在生成的IPA中(解压缩并查看已编译的二进制文件),它们看起来都很好并且匹配.在embeded.mobileprovision
具有匹配应用程序二进制权利值(当IPA是解包和二进制打开作为文本)值.错误中提到的每个值都存在于配置文件和权利中,并且值是匹配的.
我还尝试了清理项目,从设备删除所有配置文件,从设备删除应用程序,重新启动设备,在Dev Portal中删除配置文件以及创建新配置文件,以及Stackoverflow上提出的所有类似问题.现在没有任何帮助.
所以我的问题是:iOS如何知道这些值不匹配?因为已编译二进制文件中的值是嵌入式配置文件中的匹
我提到我使用Testflight分发即席建立,因为Testflight会自动验证应用程序二进制文件(授权和型材),当我上载与价值不匹配的二进制文件作为他们的FAQ部分描述它显示的错误在这里和这里
另一个奇怪的事情是,相同的错误连续出现多次(现在是5次,但我已经看到多达7次重复).
有没有人经历过类似的问题?
在此先感谢,这是提到的控制台日志:
Mar 27 17:58:21 unknown installd[138] <Error>: entitlement 'keychain-access-groups' has value not permitted by a provisioning profile
Mar 27 17:58:21 unknown installd[138] <Error>: entitlement 'com.apple.developer.ubiquity-container-identifiers' has value not permitted by a provisioning profile
Mar 27 17:58:21 unknown installd[138] <Error>: entitlement 'com.apple.developer.ubiquity-kvstore-identifier' has value not permitted by a provisioning profile
Mar 27 17:58:21 unknown installd[138] <Error>: entitlement 'application-identifier' has value not permitted by a provisioning profile
Mar 27 …
Run Code Online (Sandbox Code Playgroud) code-signing objective-c entitlements ios provisioning-profile
ios ×4
objective-c ×3
xcodebuild ×2
code-signing ×1
command-line ×1
entitlements ×1
nslog ×1
sdk ×1
swift ×1
xcode ×1