我的 Xcode 8 中的 Xcode 项目默认选中“自动管理签名”。
我如何使用 CLI 而不是 Xcode 来禁用它,因为我基于 Cordova 的应用程序必须由 Jenkins 构建。
打开 Xcode 项目后,我禁用检查并执行以下命令进行构建。
它可以工作,但手动过程应该是自动的。
xcodebuild -project "/platforms/ios/test.xcodeproj" -sdk "iphoneos10.0" -configuration "Release" -scheme test ENABLE_BITCODE="NO" install DSTROOT="/target/debug" DEVELOPMENT_TEAM="teamId" PROVISIONING_PROFILE_SPECIFIER="teamId/provisioningProfileName"
Run Code Online (Sandbox Code Playgroud) 我最近从我的 iOS 项目中删除了一个框架,并通过依赖项管理器 (CocoaPods) 安装它。然而,我注意到,在检查对源代码管理的更改时,删除了对框架的一些引用,但添加了一个绝对路径。从差异中(第一行被删除,第二行添加到我的项目文件中):
- 767C7EC51DB295CE00A8850F /* TealiumIOSLifecycle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = TealiumIOSLifecycle.framework; sourceTree = "<group>"; };
+ 767C7EC51DB295CE00A8850F /* TealiumIOSLifecycle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = TealiumIOSLifecycle.framework; path = /Users/jal/workspace/com.myapp/MyApp/Shared/ThirdParty/TealiumIOSLifecycle.framework; sourceTree = "<absolute>"; };
Run Code Online (Sandbox Code Playgroud)
我的本地计算机上的该路径上没有文件,我能够在单独的目录中以及具有不同目录结构的其他计算机上进行新的克隆,并且能够在没有任何警告或错误的情况下构建项目。项目目录中不再存在框架的物理文件(当我在Xcode中从项目中删除该文件时,我选择了“移至垃圾箱”)。
这是正常的吗?如果没有,我该如何删除这些引用?
需要明确的是,项目中的任何地方都没有引用此框架。这包括链接的框架和库、链接二进制文件与库、目标依赖项、嵌入框架等。
当我尝试在模拟器中运行 iOS 应用程序时,出现此错误:无法查找服务 com.apple.CoreSimulator.host_support: 0x3
当我部署到手机上时,该应用程序运行得很好。
我使用的是 macOS 10.12.2、Xcode 8.2.1、模拟器 10.0
我已经尝试过重新启动 Xcode、清理和清理构建目录。这种情况不仅仅发生在某个特定项目上。
感谢您的任何帮助,您可以提供!
一段时间以来,我们一直在努力解决 iOS 应用程序中的一个零星问题,似乎偶尔会启动我们的应用程序,但钥匙串尚无法访问。我们还没有找到可靠地重现这一点的方法。
\n\n与许多应用程序一样,我们使用 kSecAttrAccessible = kSecAttrAccessibleWhenUnlocked 将一些敏感数据(即用户凭据)保存到钥匙串中。应用程序将在启动期间在应用程序委托的 didFinishLaunchingWithOptions 覆盖中从钥匙串中读取这些值。这在大多数情况下都可以正常工作。
\n\n但有时我们的用户会报告无法读取钥匙串值的问题。如果用户只是终止应用程序并重新启动它,这些值仍然存在并且一切正常。我们的应用程序不在后台运行,因此我无法想到除用户操作之外的任何其他操作启动它的情况,这意味着设备已解锁。
\n\n我熟悉 application\xe2\x80\x8bProtected\xe2\x80\x8bData\xe2\x80\x8bDid\xe2\x80\x8bBecome\xe2\x80\x8bAvailable 方法,当设备解锁并且诸如钥匙串之类的受保护数据变得可访问。我想我们可以检查 didFinishLaunchingWithOptions 是否 UIApplication.is\xe2\x80\x8bProtected\xe2\x80\x8bData\xe2\x80\x8bAvailable 为 false,如果是的话,则推迟依赖于钥匙串的应用程序初始化部分application\xe2\x80\x8bProtected\xe2\x80\x8bData\xe2\x80\x8bDid\xe2\x80\x8b成为\xe2\x80\x8b可用方法。我总是对编写解决方案而无法重现和测试它持怀疑态度。
\n\n任何人都可以报告说,他们通过应用程序日志看到了一些实例,其中 iOS 受保护的数据在 didFinishLaunchingWithOptions 方法中尚不可用,但稍后可用?
\n我看过类似问题的答案,但仍然很困惑。
背景
我有一个项目正在运行,但我正在尝试在 Xcode 8.3.1 中重新创建它。我首先使用带有一个依赖项的 Swift 包管理器:[.Package(url: " https://github.com/OpenKitten/MongoKitten.git ", MajorVersion: 3)]。然后我按照我的笔记从 Cocoa 转换为 iOS(因为 SPM 不直接支持 iOS),这在之前的项目开始时有效:
一切看起来都很好,我的项目包括 MongoKitten 和它所依赖的一堆其他框架。其中之一称为“CLibreSSL”。我将所有框架作为目标添加到我新创建的目标中。
错误信息
我可以“导入 MongoKitten”到我的视图控制器中(自动完成工作)。但是,当我编译时,我收到此错误消息(即使我个人没有尝试导入 CLibreSSL):
Compile Swift source files
[... bunch of stuff referring to my new target and the viewcontroller ...]
<unknown>:0: error: missing required module 'CLibreSSL'
Run Code Online (Sandbox Code Playgroud)
我无法“导入 CLibreSSL”到我的视图控制器中(无法自动完成识别)。我注意到,当我访问 MongoKitten 相关源文件时,它们确实在导入语句中成功识别了 CLibreSSL。我什至可以删除它们并重新输入并成功自动完成。
问题
我意识到当我像我一样创建新目标时可能需要做一些额外的事情,并且它可能与搜索路径有关,但我已经尝试了很多东西并且结果没有改变。有人可以告诉我如何解决这个问题(请不要假设我有太多知识,因为我发现这些东西令人困惑)?
如果您需要更多信息,请告诉我。谢谢
我刚刚开始使用 Apple Xcode IDE 学习 Swift。我做了一个小测试 iOS 应用程序,并在尝试各种事情时无意中删除了我的主代码文件 (ViewController.swift)。“没问题”,我想,因为我在几分钟前点击了“保存”。我退出,然后再回来,但它似乎已自动保存。
我并不真正关心这个测试文件,但我想知道在尝试某些东西之前(或在无意中拉出愚蠢的动作之前)保存项目的正确方法是什么?
我正在尝试在 Xcode 中使用 Address Sanitizer,但我也使用 ccache 来加速我的构建。为此,我CC在 Xcode 项目级别设置了标志以指向我存储在的脚本~/projects/support/cmake/ccache-clang。脚本如下:
#!/bin/sh
if type -p /usr/local/bin/ccache >/dev/null 2>&1; then
export CCACHE_CPP2=true
exec /usr/local/bin/ccache "${DEVELOPER_DIR}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" "$@"
else
exec "${DEVELOPER_DIR}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" "$@"
fi
Run Code Online (Sandbox Code Playgroud)
这样就达到了预期的效果(如果开发系统上安装了ccache,则使用ccache)。这运作良好。
现在,当我们为给定方案打开地址消毒器时,问题就出现了。构建成功完成,但是当我们尝试运行时,我们终于看到了这个错误:
Error: Check dependencies
Could not determine version of clang to find its Address Sanitizer library: ~/projects/support/cmake/ccache-clang
Run Code Online (Sandbox Code Playgroud)
也许这是由于 Xcode 中的一些 hacky 实现导致的,它试图解析编译器的路径以确定版本?
想知道如何修改我的脚本以允许 Address Sanitizer 工作。CC当前的解决方法是当我们需要进行消毒工作时删除覆盖的标志。
使用 Xcode 8.3.1
我已经这样做了。
1.在Apple Developer页面添加IOS证书。
2. 在 Apple Developer 页面中添加启用 Network Extension 的标识符 App ID。
3. 在 Apple Developer 页面中添加配置文件。
4. 创建 Xcode 项目并输入在苹果开发者页面上制作的正确包 ID。并签下合适的球队。
5. 添加能力和库(网络扩展框架)。
6. 5后,在我的Xcode项目中自动生成Entitlement文件。
7.上次我写的代码是这样的。
NSLog(@"List Scan START");
NSMutableDictionary* options = [[NSMutableDictionary alloc] init];
[options setObject:@"Try Here" forKey:kNEHotspotHelperOptionDisplayName];
dispatch_queue_t queue = dispatch_queue_create("com.miro.wifilist", 0);
BOOL isAvailable = [NEHotspotHelper registerWithOptions:options queue:queue handler: ^(NEHotspotHelperCommand * cmd) {
if (cmd.commandType == kNEHotspotHelperCommandTypeEvaluate || cmd.commandType == kNEHotspotHelperCommandTypeFilterScanList ) {
for (NEHotspotNetwork* network in cmd.networkList) {
NSLog(@"%@", network.SSID);
}
} else {
NSLog(@"there …Run Code Online (Sandbox Code Playgroud) xcode8 ×10
ios ×5
xcode ×4
objective-c ×2
autosave ×1
ccache ×1
certificate ×1
cordova ×1
frameworks ×1
iphone ×1
keychain ×1
pbxproj ×1
size-classes ×1
swift ×1