澳门威利斯人_威利斯人娱乐「手机版」

来自 网络资讯 2020-05-08 17:15 的文章
当前位置: 澳门威利斯人 > 网络资讯 > 正文

项目及所遇到的坑,工作空间workspace多项目管理

那般bundle就能够不奇怪打包到app中了

3.静态库能源文件(图片、xib、plist等卡塔尔打包成bundle

1.工作空间workspace多样类管理

在桌面新建三个workspace的文件夹,并新建三个workspace放到该公文夹中,用来寄存在三个类别。接下来大家的具备工程都会存放在该目录下。

create workspace.png

AppgameWorkspace.png

接下去,展开Appgame.xcworkspace专门的学业空间,并向该工作空间中增多三个静态库项目,叁个动态库项目以至三个app主工程项目。

个别创制CommentStatic静态库、CommentFramework动态库以致Appgame主工程项目,都存放在桌面包车型客车workspace文件夹下。
File -> New -> Project... -> Cocoa Touch Static Library
File -> New -> Project... -> Cocoa Touch Framework
File -> New -> Project... -> Single View Application

充裕措施一:创制CommentFramework静态库项目,项目坐落于桌面包车型大巴workspace文件夹下,并加多到 大家创立的Appgame.xcworkspace职业空间中。

潜心:Group也选取工作空间,你和煦能够选拔不一样的来看一下功效。

CommentFramework.png

加上办法二:新建的品种寄放在桌面包车型大巴workspace文件夹下,然后再增添到Appgame.xcworkspace中。这里并不是增添到其它专业空间中。

workspace.png

接下来加多到职业空间中:

add-to-workspace.png

select-project.png

桌面workspace文件夹下的截图以至由此Appgame.xcworkspace展开的项目截图:

work-space.png

workspaceProject.png

先是点到此结束

2.workspace中主工程援用静态库或动态库

添加.a或Framework库引用
入选主工程,增多正视库。是主工程须要援用静态库和动态库,全体是在主工程中引进静态库与动态库。

主工程(Appgame) -> TARGETS -> Build Phases -> Link Binary With Libraries

addlib.png

lib&framework.png

增添头文件

addHeaderFile.png

framework.png

增多能源文件(自定义Bundle或存放在mainBundle下的卡塔尔(قطر‎
对于资源文件的援引境遇了几许难点,等待消除。今后得以直接把能源文件归入主工程。上边就介绍怎么着制作Bundle TA揽胜GETS

3.静态库能源文件(图片、xib、plist等State of Qatar打包成bundle

**添加 编译 Bundle 的TARGETS

add target.png

bundleTargets.png

修改 base SDK

base SDK.png

编写翻译能源

bundle coding.png

类型中使用

在静态库和动态水库蓄水体积易的个别成立 贰个打字与印刷形式,在主工程中张开调用。

result.png

对此头文件的引用也能够一贯将头文件放出主工程中。自定义Bundle的简要调用可自动Google。

实战截图:

appgames.png

关于动态库的加载方式得以看自身早前的篇章
iOS开辟-动态库的加载情势(一)编写翻译时加多
iOS开荒-动态库的加载方式(二)以财富文件(NSBundle)的款型丰硕

写在终极

如果你正在做二个SDK的劳作,须要在动态库中蕴藏framework,你大概照旧存在难点。那么,请先活动哪些判断framework是动态库或静态库以至framework静态库转.a静态库

动态库.png

7.遭遇的坑!!!

7.1.因为Framework是要给其余工程用的,所以新建文件的时候自然要加前缀,不管是否暴光给外界的,统统都加前缀,那么些坑了本身好久,初叶只给新建的公文加了前缀,还有个别文件是本来工程里的,直接拉过来了,出主意不暴暴露来不改名应该没事,结果最终打出来的包放到其余工程中(存在同名文件的工程),一贯编写翻译不通过,搞了长时间才察觉是以此主题材料。

7.2.有关Framework中用到的能源文件(图片等)
在Framework中所用到的图片不可能直接打包进Framework中,而是要单独打包成bundle,然后跟最后打包好的Framework一齐归入指标工程中就可以。

图片 1

Paste_Image.png

创制财富bundle的主意:
新建贰个文本夹,把所急需的财富文件(这里是图形),放进去,然后直接校订它的称呼和扩大名就足以了

图片 2

Paste_Image.png

调用bundle中的图片方法:
写了个image的分类方法,调用起来方便一点

#import "UIImage EX.h"

@implementation UIImage (EX)

  (UIImage *)getImageInBundleWithName:(NSString *)name {
    NSBundle *libBundle = [NSBundle bundleWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"MDGImage.bundle"]];
    NSString *path = @"";
    if (libBundle) {

        path = [[libBundle resourcePath] stringByAppendingPathComponent:name];

        path = [path stringByAppendingString:@".png"];
    }
    return [UIImage imageWithContentsOfFile:path];
}
@end

调用方法:

[UIImage getImageInBundleWithName:@"backArrow"]

7.3 制作成动态库

似是而非描述:在应用静态库时,运转报错(Reason: Image Not Found卡塔尔

具体原因:只怕出于还没安装Mach-O Type,做的是动态库,在选取的时候须求额外加二个手续,要把Framework同有时间丰盛到General --> Embedded Binaries中。

减轻方案:将Mach-O Type设置为Static Library

不过财富文件却不好管理,因为xcode默许只好加多自身工程内的,大概字工程的能源文件到target中.

workspace:从名称想到所包含的意义就是干活空间,使用过eclipse工具做过Android开拓的童鞋明确对专业空间并不面生。轻巧点来通晓正是三个类别的汇聚,大家常用的cocoapods正是行使的workspace。对于SDK开垦的童鞋来讲,workspace的接纳是老大有供给的,因为母包的开拓会涉及到门路。Android能够行使Android library来创制八个Module,iOS则能够动用workspace来张开项目管理。

1.在 Xcode 中,File -> New -> Project -> Framework & Library -> Cocoa Touch Framework 来创立项目。

图片 3

Paste_Image.png

cp -R -f $BUILT_PRODUCTS_DIR/*.bundle $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/

写在头里

3.在 MintmedicalDiseaseGuidelinesKit.h 文件中足够公共代码的头文件:#import<MintmedicalDiseaseGuidelinesKit/MDGDiseaseGuidelMainViewController.h>

图片 4

Paste_Image.png

Edit Scheme -> Build -> Add this bundle

2.workspace中主工程引用静态库或动态库

在付出中不时会有一部分作用是其他体系中也会用到的,所感觉了便于维护和收缩重复写代码,大家得以因而创办静态库的措施来治本代码,将转移的Framework 包直接拖入所急需的工程就足以调用相应措施。
率先是哪些创制三个Framework项目,

在大致的app中,恐怕只会用到工程,不过项目越大,越复杂,就能必要拆分项目,将依次职能拆散到各类工程中去.

从本文能够学到的知识点

参考:

http://www.hackmz.com/2016/05/25/iOS开发-静态库制作-三/

http://www.samirchen.com/create-a-framework/

http://www.hackmz.com/2016/05/26/Xcode中用Workspace来管理多项目/

虽说能源文件打包到了bundle中,可是此bundle不能够参加到其余工程编写翻译的target中

1.做事空间workspace中树立多个品类

2.增加所供给的代码

图片 5

Paste_Image.png

cp -R -f $BUILT_PRODUCTS_DIR/MyBundleName.bundle $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/

5.布署参数,这里营造的是静态库,必要将Build Settings ->Linking中的Mach-O Type设置为Static Library。

图片 6

Paste_Image.png

能够选取workspace来保管工程会集.

4.绽放公用代码的头文件。把需求暴光给外界的头文件放到 Targets -> Build Phases -> Headers -> Public 栏中。

图片 7

Paste_Image.png

累计单个bundle

6.打出通用包

和.a相同,生成的静态库需求开展统一技术适应不相同的平台,为了方便,我们得以向Xcode增多脚本来打消这些麻烦的主题素材。
6.1新建target,选拔other中的Aggregate,命名经常为framework名-Universal

图片 8

Paste_Image.png

6.2我们在target的Build Phases中式茶食击加号,增加一个Run Script

图片 9

Paste_Image.png

6.3插入脚本

图片 10

Paste_Image.png

对应的台本内容:

#!/bin/sh

UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal

# make sure the output directory exists
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"

# Step 1. Build Device and Simulator versions
xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" -arch armv7 -arch armv7s -arch arm64 clean build
xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" -arch x86_64 -arch i386 clean build

# Step 2. Copy the framework structure (from iphoneos build) to the universal folder
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/"

# Step 3. Copy Swift modules from iphonesimulator build (if it exists) to the copied framework directory
SIMULATOR_SWIFT_MODULES_DIR="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule/."
if [ -d "${SIMULATOR_SWIFT_MODULES_DIR}" ]; then
cp -R "${SIMULATOR_SWIFT_MODULES_DIR}" "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule"
fi

# Step 4. Create universal binary file using lipo and place the combined executable in the copied framework directory
lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}"

# Step 5. Convenience step to copy the framework to the project's directory
cp -R "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework" "${PROJECT_DIR}"

# Step 6. Convenience step to open the project's directory in Finder
open "${PROJECT_DIR}"

6.4在 Targets -> MintmedicalDiseaseGuidelinesKit-Universal -> Target Dependencies 中增多 MintmedicalDiseaseGuidelinesKit信任项,那样使得在编写翻译 MintmedicalDiseaseGuidelinesKit-Universal 的时候会先走符合规律流程编写翻译 MintmedicalDiseaseGuidelines基特.framework。

图片 11

Paste_Image.png

6.5编写翻译MintmedicalDiseaseGuidelinesKit-Universal生成通用framework包,拖入别的工程就足以选择。

图片 12

Paste_Image.png

图片 13

Paste_Image.png

本文由澳门威利斯人发布于网络资讯,转载请注明出处:项目及所遇到的坑,工作空间workspace多项目管理

关键词: 澳门威利斯人 资源 文件夹 工程 iOS收藏