保留文件夹结构Cocoa Pods

时间:2014-01-16 17:33:24

标签: ios objective-c cocoapods

我已经使用本教程创建了一个简单的私有pod:http://pablin.org/2013/05/18/cocoapods-for-internal-libraries/

事实上我的回购只有一组课程

一切都好,我可以完美安装我的吊舱。唯一的问题是所有文件都安装在主文件夹内,因此它不会保留文件夹结构。

我有这个文件夹结构,名为:myRepository

的存储库
 Classes 
 |
 ------ foo.h and foo.m
 ------ Controller Layer
        |
        ----------- foo2.h and foo2.m
 ------ ViewLayer
        |
        ----------- foo3.h and foo3.m

所有文件都复制到名为myRepository的文件夹中。

这是我的podspec:

Pod::Spec.new do |s|

  s.name         = "fooClasses"
  s.version      = "0.0.1"
  s.summary      = "Common clases of foo"

  s.homepage     = "http://foo.com"

  s.license      = 'BSD'
  s.license      = { :type => 'Foo License', :file => 'LICENSE.txt' }

  s.author       = { "me" => "me@me.com" }

  s.platform     = :ios, '7.0'

  s.source       = { :git => "https://github.com/myRepository.git", :tag => "0.0.1" }

  s.source_files  = "**/*.{h,m}"

  s.requires_arc = true
end

我尝试过使用s.preserve_path =“*”和s.preserve_path =“Classes”

有什么想法吗?

!!!!!!!!

由于

3 个答案:

答案 0 :(得分:14)

我已经完成了使用subspec创建自己的文件夹。

您可以使用以下行创建子规范:

s.subspec 'folder name' do |ss|
    ss.source_files = 'files'
    ss.frameworks = 'frameworks'
end

ss.frameworks不是强制性的。

您可以从CocoaPods邮件列表中看到完整的答案:

https://groups.google.com/forum/#!topic/cocoapods/0kV8r2xnqA8

谢谢mcitrrus

我更喜欢关注AFNetworking pod规范:

https://github.com/AFNetworking/AFNetworking/blob/master/AFNetworking.podspec

答案 1 :(得分:2)

如果你经常使用开发 pod,那么 cocoapods 创建的默认项目结构会有很多问题:

  • 如果您的 source_files / resources 等根目录中没有至少一个文件,则根目录在项目中不会获得等效组.

  • 组的 location 指向 pod 目录的根目录(不一定是源文件所在的位置)。这意味着您不能只是右键单击该组并“添加文件”,因为它会将文件放在错误的位置。

  • 模块之间的组和文件的顺序不同,因为事物是按名称排序的,而且您的 pod 显然具有不同的名称,这些名称可能出现也可能不会出现在 Frameworks / Pods / {{1 之前}} / Dependencies


我一直在寻找解决上述所有问题的解决方案,最终得出以下解决方案:

先决条件

我使用如下目录结构设置了我的 Pod(示例显示名为 Support Files 的 Pod)

SomeLib

第 1 步 - 让群组镜像目录层次结构

在您的 Example/ SomeLib-Example/... SomeLib-Example.xcodeproject fix_project_structure (this is an empty text file) SomeLib.podspec Sources/ FolderA/ ClassA.swift FolderB/ ClassA.swift Tests/ fix_project_structure (another empty text file) FolderA/ ClassATests.swift FolderB/ ClassBTests.swift 文件中,我们利用位于根目录中的空 podspec 来修复组结构...

fix_project_structure

第 2 步 - 重新排序和修复组位置

这实际上是一个可选步骤(见评论)

将以下 s.source_files = 'Sources/**/*.{swift}', 'fixup_project_structure' s.resource_bundles = { s.name => ['Sources/**/*.{xcassets,json,storyboard,xib,xcdatamodeld}', 'fixup_project_structure'] } s.test_spec 'Tests' do |test_spec| test_spec.source_files = 'Tests/**/*', 'Tests/fix_project_structure' end 步骤添加到您的 post_integrate...

Podfile

答案 2 :(得分:0)

由于0.36版cocoapods的变化,这个答案/问题已经过时。

只要您使用“:path”窗格,

PR 2647就会添加默认分组行为。从1.3.1开始,行为是它将遍历/ Classes / ...结构,直到它看到文件或第二个子文件夹并从.xcodeproj文件中开始分组。