jjzjj

ios - Xcode with iOS - 以易于在 Debug模式下运行、分发、迭代的方式创建库

coder 2023-07-25 原文

这是针对 Xcode 4.5.x iOS armv7 armv7s 和 sim,特别是关于 Xcode 项目设置/项目build设置:

我有一个项目“A”,它是应用商店中的一个应用。 我有一个项目“B”,它是一个将在 A 中作为依赖项使用的库,但也作为第三方库分发给其他公司以在他们的应用程序中使用。 (其他公司的第 3 方应用在这种情况下表示为“Y”)。

要求如下:

  • 必须能够在 Debug模式下运行“A”,当然还可以在同一个构建/ session 中同时调试嵌套的“B”项目。
  • 在“A”中,我可以 CMD+单击“B”中的方法签名,然后直接跳转到该 src 文件,我可以在其中自由编辑然后重新编译,就好像它来自同一个项目一样。
  • 其他公司的开发人员“X”必须能够轻松地将我们的库“B”拖到他的项目“Y”中,其中“B”是一个静态库,只公开了所需的头文件。 “Y”当然会从“B”的实际头文件的子集中调用方法。只有来自此子集的文件应包含在 Dev“X”的分发中。
  • 开发人员“X”根本不需要修改他的 Xcode 项目中的任何内容,只需将“B”的文件夹(其中包含静态库和头文件子集)拖到他的项目中,然后单击“复制资源,创建引用资料等”。
  • 我需要能够基于我一直在编辑的相同文件轻松生成“B”的静态库构建,因为我在其依赖项目“A”中迭代和调试该项目“B” .
  • “B”除了源代码之外没有其他资源——没有图像 Assets 、xib 或类似的东西。
  • 在“B”中,我点击“存档”,噗!有一个静态库(必须是 fat 二进制文件,我的意思是它可以在 simulator + armv7 + armv7s 上运行,求求你!!)带有准备分发的基本头文件。
  • 所有这些都必须应用商店批准-友好
  • 此外,这必须是可靠的。如果我每次添加一个文件都必须不断回来进行大量配置更改,那就不好了。

更新:
* 最重要:这需要是一个 repo 协议(protocol),我可以检查这是一个完整的端到端模板,我正在寻找什么,我需要能够打开 Xcode 4.5.2+ 并点击播放并看到这个东西的构建,没有痛苦。

500 分 给任何能给我提供一个模板项目的人,该项目演示了我上面描述的所有内容,“A”、“B”和“Y”(“B”静态库用作一个部门)。我所需要的只是一组框架项目(“A”、“B”(嵌套在“A”中)和“Y”),它们展示了如何做到这一点。在发布赏金之前,请不要隐瞒答案。如果它符合我的要求,我将确保您获得我的赏金积分。

我有点担心,由于 Xcode 的局限性,这甚至不可能以一种不完全麻烦的方式实现。请证明我错了。

更新:我决定不再关心 armv6。再见,armv6。 如果您可以将 armv6 与 armv7、armv7s、i386/simulator 一起纳入 dist 输出,则加分。

附言我保证我会合理地给予积分。我不想在技术上拒绝他们。如果你能在这方面大大减轻我的生活痛苦,我会很乐意给你加分。

最佳答案

仅在 Xcode 中这是不可能的。由于编译目标切换(模拟器、设备等),您将需要一些构建脚本(当然您可以从 Xcode 中调用)。

我认为您至少必须在“复制文件”构建步骤中添加额外的分发 header 。但是,如果您更改某些内容,则无需进行其他修改。

我为 libturbojpeg 做了类似的事情,参见 https://github.com/dunkelstern/libturbojpeg-ios以供引用。如果您从终端调用“build.sh”文件,它目前会将一个胖库放入“lib”,但忽略分发 header 。在 libturbojpeg 的情况下,我需要 2 个项目文件,因为每个目标将不同的汇编程序文件子集编译到库中(最好不要查看汇编程序 makefile 内容)。要编译你需要一个最新版本的 NASM,因为苹果发布的版本很旧(用 brew 获取)。我将很快在同一帐户上发布此类库构建项目的模板。 (如果在此处使用适当的链接完成,将进行编辑或评论)

基本上它是这样工作的:

  1. 创建一个构建脚本,为每个需要的平台目标调用 xcodebuild
  2. Xcode 库项目必须包含一个脚本,用于将构建的库放在构建脚本可以找到的目录中
  3. 必须通过“复制文件”目标操作复制其他 header
  4. 构建脚本必须将所有库构建与 lipo
  5. 合并
  6. 将构建脚本作为“运行脚本”目标添加到您的构建中,但请注意您不会创建无限循环(或者只是从终端调用它来创建发布构建)
  7. 在你的主项目中添加库子项目

然后您可以使用复制的头文件和 lipo 合并的通用库分发输出目录,并像往常一样在您的工作区中正常使用该库作为子项目(它仅构建和链接然后需要库,而不是通用库,但这应该没问题)

这实际上并没有解决为库创建 DSYM 文件的问题。但通常在构建调试版本时,调试符号应该在库本身中。它将在发布版本上去除调试符号,然后您将没有 DSYM。

示例项目链接:https://github.com/dunkelstern/StaticLibraryTemplate

关于ios - Xcode with iOS - 以易于在 Debug模式下运行、分发、迭代的方式创建库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13264847/

有关ios - Xcode with iOS - 以易于在 Debug模式下运行、分发、迭代的方式创建库的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  3. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  4. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  5. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  6. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  7. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  8. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  9. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  10. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

随机推荐