小编Mir*_*vac的帖子

NSLog()同时控制台和文件

我想重定向NSog()到文件,但仍然在控制台中看到输出.我知道stderr可以使用以下方法重定向到文件:

freopen("file.log", "a+", stderr);
Run Code Online (Sandbox Code Playgroud)

但在将其重定向到文件后,控制台输出中不再显示日志.

我可以构建一个自定义包装器,NSLog()但我不会得到stderr在应用程序崩溃时写入的记录崩溃日志.

我还在尝试dup()复制文件描述符的其他方法,但输出是文件或控制台中的ether,从不在两者中.

这里也提出了类似的问题: 在iPhone上将stderr写入文件和控制台, 但没有接受答案,或建议使用NSLog()包装器.

有没有人知道如何管理这项工作?Thanx提前.

更新:重定向最重要的部分是将系统错误日志(stderr)写入控制台和文件.

objective-c nslog

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

从swift访问向前声明的枚举的属性

鉴于存在一个用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)

为了使用MessageSwift代码库的其余部分,将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中,但这不是一个选项,我正在寻找一种适用于当前设置的解决方案.

objective-c ios swift objc-bridging-header

14
推荐指数
2
解决办法
640
查看次数

带有SDK绝对路径的xcodebuild命令

我正在使用xcodebuild命令行工具来构建iOS应用程序.

安装Xcode45-DP1后,它会自动使用新Xcode45-DP1应用程序包中的6.0 SDK来构建应用程序.将此应用程序提交到AppStore时有2个问题.

  1. 该应用程序现在使用最新的SDK(6.0)自动构建,支持注释,因此无法提交应用程序.解决方案:我将旧版SDK(5.1)复制到Xcode45-DP.app并在指定的命令行中复制-sdk iphoneos5.1

  2. 第二个问题是,当ApplicationLoader正在验证应用程序时,会看到从不受支持的Xcode版本(45-DP1)使用SDK并拒绝上传应用程序.解决方案:我想为SDK指定绝对路径,例如:xcodebuild -sdk /path/to/5.1sdk...

问题是xcodebuild总是说无法找到SDK"/path/to/iPhoneOS5.1.sdk/".

有没有人有过如何使用sdk的绝对路径以及它应该指向哪个文件/目录的经验?

提前致谢.

sdk xcode command-line xcodebuild ios

6
推荐指数
1
解决办法
7125
查看次数

xcodebuild PLATFORM_NAME总是== iphoneos

我正在尝试从命令行构建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.

这是一个错误,还是我的构建配置有问题?谢谢

xcodebuild ios

6
推荐指数
0
解决办法
1483
查看次数

"权利具有配置文件不允许的价值",但事实并非如此

我试图通过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

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