从目标中包含/排除整个组

2024-04-28

我的项目有一个包含数百个文件的组(组织成几十个两级子组)。该组中的文件本身经常被更改。我希望这些文件包含在某些目标中,但不包含在其他目标中。

在 Xcode 3.x 中,每次更改组后,我只需获取有关组本身的信息,转到“目标”选项卡,然后(重新)选择我想要的目标。 (事实上​​,这与 2010 年的一个几乎相同的问题的答案,Xcode — 组和目标 https://stackoverflow.com/questions/3103957/xcode-groups-and-targets.)

在 Xcode 5 中,如果您选择了一个组,则等效的文件检查器面板没有“目标成员资格”部分(并且,即使选择一个组与选择其所有文件相同,如果您选择“目标成员资格”复选框也会被禁用)多个文件)。

那么,这个功能是否仍然存在,但隐藏在我无法找到的地方?

如果没有,显然还有其他方法可以做我想做的事——编写 Xcode 脚本、解析 .pbxproj 文件,或者将组抽象为子项目或构建静态库的完全独立的项目等。但我很乐意能够在这里使用 Xcode,就像我在 3.x 中所做的那样,而不是必须对抗它。


实际上,编写 Xcode 脚本似乎不起作用。任何获取构建阶段的构建文件的尝试都会失败,并出现一般 -10000 错误。例如:

tell application "Xcode"
    set theproject to project "SampleProject"
    set thetarget to target "SampleTarget" of theproject
    set thephase to build phase "Compile Sources" of thetarget
    build files of phase
end tell

...最后一行失败:

error "Xcode got an error: AppleEvent handler failed." number -10000

这是我最终使用的技巧——显然我仍然希望有更好的解决方案。

#!/usr/bin/env python3

import os
import plistlib
import sys

pbxproj = os.path.join(sys.argv[1], 'project.pbxproj')
groupname = sys.argv[2]
extensions = 'm mm c cc cpp'.split()

with open(pbxproj, 'rb') as f:
    p = plistlib.load(f)

objs = p['objects']

groupid, group = next((k, v) for k, v in objs.items()
                      if v.get('path') == groupname)

def descendants(id):
    obj = objs[id]
    if obj['isa'] == 'PBXFileReference':
        yield (id, obj)
    for child in obj.get('children', []):
        yield from descendants(child)

mdict = {id: obj for id, obj in descendants(group_id)
         if os.path.splitext(obj['path'])[-1] in extensions}

proj_id, proj = next((k, v) for k, v in objs.items()
                     if v['isa'] == 'PBXProject')

for target_id in proj['targets']:
    target = objs[target_id]
    phase_ids = target['buildPhases']
    phases = [(phase_id, objs[phase_id]) for phase_id in phase_ids]
    phase_id, phase = next((phase_id, phase)
                           for phase_id, phase in phases
                           if phase['isa'] == 'PBXSourcesBuildPhase')
    fileref_ids = [i
                   for i, buildfile_id in enumerate(phase['files'])
                   if objs[buildfile_id]['fileRef'] in mdict]
    fileref_ids.sort(reverse=True)
    for i in fileref_ids:
        del phase['files'][i]

with open(pbxproj + '.new', 'wb') as f:
    plistlib.dump(p, f)
os.rename(pbxproj, pbxproj + '.bak')
os.rename(pbxproj + '.new', pbxproj)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从目标中包含/排除整个组 的相关文章

  • 当我打开在 Xcode 4 中创建的 Google 地图项目时,Xcode 5 会警告我的架构设置

    我刚刚更新到新发布的 Xcode 5 我正在开发一个使用 Google 地图 iOS SDK 的 iOS 应用程序 当我在 Xcode 4 中开发时 我改变了我的Architectures在我的项目设置中进行设置 按照 Google 的步骤
  • iOS Flutter 与 Firebase:启动时 FlutterAppDelegate 中出现白屏和 SIGABRT

    现在在多个项目中 非常不一致的是 我在启动应用程序时出现白屏 并且 Xcode 显示错误 Thread 1 signal SIGABRT 在线上 objc class AppDelegate FlutterAppDelegate 这些都是i
  • Xcode 不再识别测试

    我已经解决这个问题几天了 但我没有任何想法 我在 Xcode 中使用单元测试 效果很好 突然 Xcode 不再识别我的测试 如果我进入测试面板 它会显示我的测试为零 我其实有13个 运行单独测试或某些课程的能力现已消失 它不会在编辑器区域的
  • 请求开发者证书的分发配置文件

    使用 Xcode 9 1 构建 iOS 应用程序后 我尝试将其存档 但我收到以下错误消息 配置文件 MyAppProfile 不包括签名证书 iPhone Developer My Name X1YZ2AB3CD 仔细观察后 我发现 MyA
  • Xcode 中的“使用不间断空格 (U+00A0) 代替常规空格”警告

    When typing a space character in Xcode a warning appears sometimes 使用不间断空格 U 00A0 代替常规空格 早期的 Xcode 版本显示以下消息 将 Unicode 字符
  • UITableView 顶部出现间隙[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我不确定现在问这个问题是否合适 我正在表视图上使用 Xcode 5 预览版 现在的问题是我的表格视图是否被选择为group比我在第一个单元
  • 如何以编程方式在导航栏中设置图片?

    我有一个带有导航栏的详细视图 其中带有后退按钮和视图名称 导航栏以编程方式设置 呈现的名称是这样设置的 self title NSLocalizedString name 该名称取决于所呈现的视图 现在我还想在导航栏上显示一个小图标 这也取
  • pdf文件文本阅读和搜索

    我想从 pdf 文件中读取文本并将文本搜索到 pdf 文件中 这是我知道的链接 这些都帮不了我 使用 Quartz 2D 解析 pdf 时获取文本位置 https stackoverflow com questions 3627745 ge
  • 使用 PRODUCT_NAME 构建 cocoapods 项目的 xcodebuild 失败

    我可以使用以下命令构建我的 Cocoapods 项目 base basename xcworkspace xcworkspace xcodebuild sdk iphonesimulator ios version CONFIGURATIO
  • Xcode 新手无法用 C++ 打开文件?

    我一直在我参加的课程中使用 Windows 但我正在尝试运行基本代码来弄清楚如何从 Xcode 上的文件打开 关闭 输入 输出 而我通常在 Visual Studio 上使用的代码不是不知道为什么 谢谢 include
  • SwiftUI 转义闭包捕获变异的“self”参数

    我有一个可以通过两种方式打开的视图 一个包含提供给它的数据 另一个包含对 Firestore 文档的文档引用 我创建了两个构造函数 在第一个构造函数中我提供数据 在另一个构造函数中我提供文档参考 然后我使用此引用进行网络调用 但出现错误 E
  • Xcode 警告引用开发第三方库的用户帐户

    我在我的项目中使用第三方库 BugSense 我已将他们的框架添加到我的项目中 对其进行初始化等 以便一切正常 然而 每次构建项目时 我都会收到大量 40 多个 以下警告 警告 i386 Users genesis Library Deve
  • 从 Xcode 6 安装失败:“存在内部 API 错误”

    我尝试在 ipad ios 7 1 2 上运行一个在我的手机 ios 8 4 1 上运行良好的应用程序 Xcode 提示 存在内部 API 错误 仅此而已 我不确定如何解释日志 怎么了 我该如何解决 ipad日志 Aug 29 17 39
  • 签名根框架中嵌入的子框架不起作用(Xcode 11.2.1)

    我有一个小型的概念验证应用程序 我试图在我的框架 AequumPOCFramework framework 中嵌入 并签名 一个框架 Alamofire 但是 当我尝试部署到我的设备时 它不断给出我的错误 在使用库验证的进程中使用无效 映射
  • 在 Cocoa/Carbon 下调试 NULL CGContext

    在执行程序期间 我在 XCode 调试控制台中得到以下输出
  • 多次显示admob插页式广告怎么办?

    我有一个小型游戏应用程序 它有一个故事板 里面创建了像开始菜单 游戏区域 分数这样的场景 我在其中添加了 admob 横幅视图和插页式广告 我的横幅视图工作正常 但我的插页式广告只能工作一次 我在 viewdidload 上加载插页式广告
  • 从 Xcode 更改按钮文本?

    我有一个 IBAction 连接到 Interface Builder 中的一个按钮 是否可以在运行时从我的代码中更改按钮 在 IB 中 上的文本 如果您的代码中有一个连接到某个操作的按钮 则无需实例变量即可更改标题 例如 如果按钮设置为以
  • Xcode“使用性能工具运行”被禁用?

    我正在尝试从我的 Xcode 项目中查找内存泄漏 我不知道发生了什么 我无法选择任何内容Run gt Run with performance tool 事物列表被禁用 请帮助我 我是初学者 问题是我已经删除了构建文件夹并尝试使用性能工具运
  • OSX Swift 在默认浏览器中打开 URL

    如何使用 Swift 作为编程语言和 OSX 作为平台在系统默认浏览器中打开 URL 我发现了很多UIApplication like UIApplication sharedApplication openURL NSURL string
  • Xcode 6.4 Swift 单元测试无法编译:“GPUImage.h 未找到”“无法导入桥接标头”

    我的 Xcode 项目构建并运行良好 它有 Swift 和 Objective C 代码 它已安装 GPUImage 我向它添加了单元测试 现在它将不再编译 找不到 GPUImage h 文件 导入桥接标头失败 以下是我发现并尝试过的解决方

随机推荐

  • RVM 和 rbenv 实际上是如何工作的?

    我对 RVM 和 rbenv 的实际工作原理感兴趣 显然 它们在不同版本的 Ruby 和 gemset 之间进行交换 但这是如何实现的呢 我原以为他们只是简单地更新符号链接 但深入研究代码后 我必须承认我对 Bash 的了解很肤浅 他们似乎
  • 使用 ViewModel 设计 MVC 存储库

    我想创建一个存储库类来将我的数据逻辑与控制器分开 我使用 ViewModel 来表示一些数据 这些数据将填充来自不同表的数据 我有一些问题 对于像这样的方法GetAll 我要返回一个IQueryable
  • 根据当前窗口中的半径限制 Google 地图上来自 Instagram API 的帖子

    所以我有下面的代码 它是一个 Node js 应用程序的前端 它使用特定的主题标签提取 Instagram 帖子 现在它在世界各地发布 有没有办法限制帖子的半径 如果可能的话 限制用户当前可见的窗口 我正在使用 Instagram 实时标签
  • 使用实体框架将枚举名称存储在数据库中

    public enum Currency EUR 1 USD 2 GBP 3 假设我有一个如上所示的枚举 如果我要使用实体框架 代码优先 来使用它 那么int值将存储在数据库中 不存储查找表 也不存储枚举值的字符串名称 这使得直接读取数据库
  • 从 javaFX 场景拖放到 Windows 资源管理器

    有什么方法可以从 javaFX 场景拖放到 Windows 资源管理器吗 就在这里 您应该使用 onDragDetected 函数来启动拖放事件 并使用 onDragDone 函数在完成拖放后执行您想要的任何操作 这里有一个例子 final
  • 如何在 iBatis 中映射 List

    我有一堂这样的课 public SomeClass private List
  • 如何在 iOS (ObjC) 中安排每日本地推送通知?

    无法安排每日本地PushNotification以正确的方式 我只想在上午 9 00 显示一个每日本地 PushNotification 其中包含今天的计数任务 我的代码只执行一次didFinishLaunchingWithOptions
  • 如何在android中制作正在运行的应用程序的小部件?

    我想制作我正在运行的应用程序的小部件 我的意思是我想通过主屏幕上的小部件访问我的应用程序 我想拨打电话 向存储在我的应用程序中的特定号码发送短信 在安卓上可以吗 我被困在这个问题上 如果有人有任何类型的想法 请建议我 Edit 我想制作像电
  • 通过宏根据工作表名称重新排序 Excel 工作表

    如果我的 Excel 文档中有 6 个工作表 按以下顺序命名和排列 O1 O2 O3 O1 2 O2 2 O3 3 是否可以编写一个宏来更改这些工作表的顺序 这是我正在寻找的序列 O1 O1 2 O2 O2 2 O3 O3 2 Thanks
  • XCTestExpectation:如何避免在等待上下文结束后调用fulfill方法?

    我正在使用 Xcode 6 的新异步测试功能 当异步任务在超时之前结束时 一切正常 但如果任务花费的时间超过超时时间 事情就会变得更加复杂 这是我进行测试的方式 interface AsyncTestCase XCTestCase end
  • 使用递归查找数组中的最大值

    对于我被要求解决的问题之一 我使用 for 循环找到了数组的最大值 所以我尝试使用递归来找到它 这就是我想到的 public static int findMax int a int head int last int max 0 if h
  • 数据包丢失和数据包重复

    我试图找出数据包丢失和数据包重复问题之间的区别 有谁知道 数据包重复 是什么意思 和TCP检测到丢失时重传数据包一样吗 No In TCP 数据包 的传递是可靠的 我认为在这种情况下术语数据应该更好 因为它是面向流的协议 数据包丢失和重复是
  • iOS 滑块默认缩略图的大小?

    iOS 滑块的 默认 缩略图的确切尺寸 宽度 高度 是多少 是否有一些聪明的方法可以将其从系统 XCode iOS 中引诱出来 I tried int thumbWidth slider currentThumbImage size wid
  • res.cookie未在浏览器中设置cookie

    我目前正在尝试使用 React 客户端设置 Node Express 应用程序以与之交互 我设置了护照来处理 JWT 身份验证 当用户登录时 我验证电子邮件 密码 然后我设置cookie res cookie jwt token httpO
  • ViewModel 中的 MediaElement.play()

    我正在努力解决以下问题 我正在使用 MVVM 模式构建 WP8 应用程序 我的 view xaml 中有一个媒体元素 并且在 viewmodel cs 中有控制该媒体元素的逻辑 例如 播放 停止 暂停和音量 如何使用绑定从我的视图模型在此媒
  • 表“DBNAME.hibernate_sequence”不存在

    我有一个使用 spring data jpa 的 Spring Boot 2 0 1 RELEASE 应用程序
  • 为什么express服务器接收到的前端数据是未定义的?

    我目前正在开发社交媒体 Mern Stack React 应用程序 我使用 Node js 和 Express 作为我的后端服务 还使用 mongoose 来存储我的数据 并使用 axios 和 redux thunk 将后端连接到前端 到
  • TFS 2008 在编辑时自动检出代码

    我正在开发一个已添加到 TFS 服务器的 Visual Studio 2008 项目 我不确定为 TFS 配置了哪些设置和策略 这是由单独的部门而不是开发人员完成的 每次我对代码文件进行编辑时 都会自动检出该文件 无需自己显式检出代码文件
  • Xamarin.Android 应用程序仅在干净编译时找到启动器活动

    我有一个Xamarin Android标记为 MainLauncher 的活动称为 Login 当我第一次按 F5 时 应用程序在模拟器中正常启动 然后我停下来 进行一些代码更改 再次按 F5 我可以看到应用程序在模拟器中启动 当我收到以下
  • 从目标中包含/排除整个组

    我的项目有一个包含数百个文件的组 组织成几十个两级子组 该组中的文件本身经常被更改 我希望这些文件包含在某些目标中 但不包含在其他目标中 在 Xcode 3 x 中 每次更改组后 我只需获取有关组本身的信息 转到 目标 选项卡 然后 重新