美文网首页iOS开发iOSOC进化
iOS用workspace和cocoapods管理多个项目

iOS用workspace和cocoapods管理多个项目

作者: 春风酿酒 | 来源:发表于2017-02-28 17:40 被阅读4662次

    1.构建一个Workspace

    1.png

    如图选择构建一个WorkSpace,会生成.xcworkspace文件,以后就通过打开这个文件来打开WorkSpace。打开工程,会发现什么都没有,然后我们要添加各个工程(project)。我现在创建一个名为Myworkspace.xcworkspace的文件放在文件夹Workspace中。

    2.创建并添加新工程

    方法一:双击打开Myworkspace.xcworkspace,然后新建MyApp1工程,如下图,图中的红色框框内要记得改

    2.png 3.png

    方法二,如果已经有创建好了的工程,可以用这种方法添加进来。
    先把创建好的工程MyApp2整个文件夹拖到文件夹Workspace中,然后在Xcode文管理文件的面板里,右键选择添加新文件,就把项目的MyApp2.xcodeproj文件加进来就可以了

    4.png 5.png

    重复上述动作,把所有需要的项目都加进来。虽然添加项目是可以任意路径的,但是建议把所有要添加的项目放到同一个文件夹里,这样便于像header search paths这类的路径配置。

    3.互相引用

    如果要在项目MyApp1中引用MyApp2中的文件,则必须要修改路径。在MyApp1的Build Settings 里找到Header Search Paths,添加一项$(SRCROOT)/../MyApp2(也可以直接将文件夹MyApp2拖到里面自动生成路径),并且设置为recursive。$(SRCROOT)是当前的工程路径,..是返回上一层,然后到MyApp2文件夹。使用了相对路径,为了是项目移动不会影响这个配置,只要主工程和其他工程的相对位置不变,这里的相对位置是固定在同一个文件夹。

    7.png

    接下来是引用文件

    8.png 9.png 10.png

    引入头文件时如果不引入.m文件会报错(如果是静态库可以引入.a文件,同时要公开.h文件,这样就不会报错了)

    4.使用cocoaPods管理

    用终端cd到根目录,用 $ touch Podfile命令创建Podfile文件,然后用xcode打开编辑

    11.png 12.png
    workspace 'MyWorkspace.xcworkspace' //workspace文件名
    project 'MyApp2/MyApp2.xcodeproj' //主工程路径
    
    target 'MyApp2' do
      platform :ios, '8.0'
      project 'MyApp2/MyApp2.xcodeproj' //工程路径
      pod 'Masonry', '~> 1.0.2'
    end
    
    target 'MyApp1' do
      platform :ios, '8.0'
      project 'MyApp1/MyApp1.xcodeproj' //工程路径
      pod 'Masonry', '~> 1.0.2'
      pod 'AFNetworking', '~> 3.1.0'
    end
    

    最后执行$ pod install指令就OK了
    如果出现以下错误

    13.png
    则在header search paths中添加$(inherited)即可(或者先执行步骤4再执行步骤3也可避免此问题)
    14.png
    demo地址

    相关文章

      网友评论

      • 这个昵称有点烦:如果MyApp2 里面test2 引用到了 其他的类或者宏定义,而且头文件放在了PCH里面,运行MyApp1 就会报错,提示找不到 其他的类或者宏定义,这个需要添加什么配置项吗,最近两天刚开始弄workSpace相关 ,博主有遇到类似情况吗,多谢了
      • ethan_cun:todo引用不同project的图片等资源
      • lizhi_boy:这样做打出来的包对审核有影响吗?
        春风酿酒:@lizhi_boy 这个还没试过,应该不会有影响的
      • 木头Lee:你好,podfile文件为两个target都导入了第三方库么,我如果只想在一个target里面导入第三方库只配置一个target就可以吗?
        target 'MyApp2' do
        platform :ios, '8.0'
        project 'MyApp2/MyApp2.xcodeproj' //工程路径
        pod 'Masonry', '~> 1.0.2'
        end
        春风酿酒:@木头Lee 这个自己动手试一试就清楚了,印象会更深刻
      • 铃鹿山大魔王:Good,按照博客提示,顺利做完了一个。
      • hahand:@Topsky 请问博主,如何交叉调用IB文件或者图片资源?
      • 海浪萌物:添加完成后想import第三方库的头文件,没提示了。。这个怎么弄啊
      • 余额:在吗,请问你podfile 是放在workspace同级目录还是放在MyApp
        春风酿酒:不用的
        余额:@Topsky 可以问下这个是什么意思吗project 'MyApp2/MyApp2.xcodeproj' //主工程路径 要在MyApp2下面先pods一个吗
        春风酿酒:和.xcworkspace文件同级目录
      • tinyOne:Undefined symbols for architecture x86_64:
        "_OBJC_CLASS_$_TestObject", referenced from:
        objc-class-ref in ViewController.o
        ld: symbol(s) not found for architecture x86_64
        clang: error: linker command failed with exit code 1 (use -v to see invocation)

        按照你的做法,调用testObject方法会报错?怎么回事
        七夜叹:你没有导入testObject.m文件,..
      • 程守斌:就需要这个功能:+1:
      • 928df130896d:想请教一个问题,我按照上面的操作,不过我的MyApp2是之前写的一个项目,里面有导入第三方的SDK,按照上面的操作总是有报错,找不到引入的SDK的头文件,这该怎么解呢
        捕梦人:我也是 而且MYApp1 是要引用MyApp2(我MyApp2 直接是一个framework工程)
        春风酿酒:MyApp2引入SDK是通过cocoPods引入的吗
      • _海角_:如果两个项目中都有自己的pch文件,这个怎么处理?
      • 黄花菜先生:MyApp2 无法调用cocoapods的文件
        黄花菜先生:@Topsky 我搞错了,可以的,谢谢
        春风酿酒:无法导入头文件吗?在Podfile里面的MyApp2中如果导入了第三方库,不应该没法导入头文件啊
      • 黄花菜先生:第一个,如果引入.m文件,.h文件就不需要了。
        第二个,可否把demo共享一下
        春风酿酒:不引入.h文件这点我倒没想到,demo当时搞完我就删了(因为里面没啥内容),写这个是当时网上看了好多文章后总结下来方便记住的

      本文标题:iOS用workspace和cocoapods管理多个项目

      本文链接:https://www.haomeiwen.com/subject/upnxgttx.html