• 在 android\app\src\main下新建...react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/a...

     

    在 android\app\src\main下新建assets文件夹

    react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

     

    index.js 为入口注册文件,对应修改index.android.js 或 index.ios.js文件名

    报错图片

    展开全文
  • 在我们使用第三方框架时,常常看到XXX.bundle的文件。 我们找到该文件,显示包内容,大致看到很多资源文件:图片、配置文本、XIB文件…… 什么是Bundle文件? 简单理解,就是资源文件包。我们将许多...
    在我们使用第三方框架时,常常看到XXX.bundle的文件。
    我们找到该文件,显示包内容,大致看到很多资源文件:图片、配置文本、XIB文件……

    什么是Bundle文件?
    简单理解,就是资源文件包。我们将许多图片、XIB、文本文件组织在一起,打包成一个Bundle文件。方便在其他项目中引用包内的资源。

    Bundle文件的特点?
    Bundle是静态的,也就是说,我们包含到包中的资源文件作为一个资源包是不参加项目编译的。也就意味着,bundle包中不能包含可执行的文件。它仅仅是作为资源,被解析成为特定的2进制数据。

    制作Bundle

    1.新建bundle项目
    iOS-生成Bundle包-引入bundle-使用bundle

    2.添加需要的图片
    加入你需要编译在bundle中的资源文件。
    当然,默认的配置也是可以的,如果你需要特定的优化或者特定的路径配置,你可以进行下面第3步的配置。

    3.你可以对编译的bundle进行一些可选的设置(可选)
    a.作为资源包,仅仅需要编译就好,无需安装相关的配置。
    iOS-生成Bundle包-引入bundle-使用bundle

    b.同样要删除安装路径。
    iOS-生成Bundle包-引入bundle-使用bundle

    c.该资源包的pch文件和strings文件是可以删除的。
    iOS-生成Bundle包-引入bundle-使用bundle

    4.最好状态下,要编译出适用与iPhone的bundle文件。
    iOS-生成Bundle包-引入bundle-使用bundle

    项目集成bundle

    使用bundle就非常的easy了,将编译好的XXXX.bundle 文件直接加入到需要的项目中。省略了!

    使用bundle中的资源
    将要使用的bundle集成到项目中后,就可以使用了。需要注意的就是,bundle是静态的,不进行编译的资源文件。所以,要使用bundle中的资源,就需要找到相应的资源路径。
    这里废话就不多说了,贴代码!

    VC获得bundle中的资源


    NSString * bundlePath = [[ NSBundle mainBundlepathForResource: @ "MyBundle"ofType :@ "bundle"];

    NSBundle *resourceBundle = [NSBundle bundleWithPath:bundlePath];

    UIViewController *vc = [[UIViewController allocinitWithNibName:@"vc_name"bundle:resourceBundle];


    图片获得bundle中的资源

    UIImageView *imgView=[[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 50,50)];

    UIImage *image = [UIImage imageNamed:@"MyBundle.bundle/img_collect_success"];

    [imgView setImage:image];


    或者

    UIImageView *imgView=[[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 50,50)];

    NSString *imgPath= [bundlePath stringByAppendingPathComponent:@"img_collect_success.png"];

    UIImage *image_1=[UIImage imageWithContentsOfFile:imgPath];

    [imgView setImage:image_1];


    当然,可以写成预编译语句:

    #define MYBUNDLE_NAME @ "MyBundle.bundle"

    #define MYBUNDLE_PATH [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: MYBUNDLE_NAME]

    #define MYBUNDLE [NSBundle bundleWithPath: MYBUNDLE_PATH]


    展开全文
  • 第一种情况:打包工程,Validate 的时候提示: No suitable application records were found. Verify your bundle identifier ‘xxx’ is correct.原因:你没有在 iTunes Connect 中...第二种情况:打包好工程,用 A

    第一种情况:

    打包工程,Validate 的时候提示:
    No suitable application records were found. Verify your bundle identifier ‘xxx’ is correct.

    这里写图片描述

    原因:你没有在 iTunes Connect 中是否建立了对应 bundle id 的 App,
    创建好再 Validate 即可。


    第二种情况:

    打包好工程,用 Application Loader 提交的时候提示:

    No suitable application records were found. Verify your bundle identifier ‘xxx’ is correct.

    原因:这是因为提交ipa时,你选择的开发者账户不正确,尴尬了。。。

    这里写图片描述

    注销,登录对应的开发者账号,然后再提交就没问题了。

    展开全文
  • IOS 多工程依赖(.a)静态库和Bundle

    前言:当开发到了一定程度后,积累的工具类或者封装的东西就越来越多,而很多工程会重复使用到这些类,但是又不想每个工程都导入一遍,可能会想到将这些打包成(.a)库或者bundle,但是这样子有变动的时候又得重新编译一遍,再导入,耗费不少时间。解决的方法很多,比如建立workspace,多个工程同级使用等。写这文章,是为了记录一遍日后翻看。本人的做法如下:


    1、静态库(.a)库

    在iOS中静态库以.a和.framework的形式存在,动态库以.dylib和.framework的形式存在。之所以.framework既可能是动态库又可能是静态库,是因为苹果公司禁止用户级App使用动态库,而自己却又堂而皇之的使用动态库,这就造成了iOS中系统级的.framework是动态库,用户级的.framework是静态库。二者区别不大,.a是纯二进制文件,.a文件不能单独使用,至少要有.h文件配合,而.framework除了二进制文件外,还包含一些资源文件(头文件,plist等),由于自身包含了头文件,所以.framework可以单独使用。


    选择静态库
    创建静态库
    静态库创建好了,如果现在编译的话,就能得到(.a)库了。
    这里写图片描述
    这里需要注意的是,文件夹“include”里边包含的是类的头文件,当你发现添加了依赖,却找不到某个类的时候,去Build Phases->CopyFiles查看一下是否有添加了该类的头文件
    这里写图片描述
    图中的第四步是默认的头文件build后存放的位置,可以将它改变(比如:../$(PRODUCT_NAME)/Headers),以便在其它工程中建立依赖时容易找到,这个用处后面会有说到。
    而(.a)库build后的存放位置也是可以改变的,例:
    这里写图片描述
    改变前
    这里写图片描述
    改变后
    之所以改变它们的编译路径,就是为了之后的建立依赖方便找到,和改变头文件是一样的。
    需要注意的是,build后的存放分为debug,release,还有模拟器,改变存放路径是最好分开。
    这里写图片描述
    特别需要注意的是,在Build Settings里边有个叫Build Active Architecture Only的属性,为了编译速度快,Debug情况下默认为Yes,只是编译当前版本,在这里我们需要设置成NO,以满足我们在不同的环境中使用,当碰到静态库引用报错时,我们除了可以检查路径是否正确外,还可以利用命令行“lipo -info”来查看当前引用的库所支持的环境。
    Build Active Architecture Only
    到了这里,(.a)库的创建和简单配置基本完成,根据不同环境编译后,可以导入到其它工程使用了。但,这只是简单使用,显然不能满足我们前面说的,现在,接着走。
    使用过(.a)库的人知道,假如我们使用的工具类带了(.xib)呢?你会发现,编译的时候,没有见到xib的文件
    这里写图片描述
    (.xib)文件没有关联上去,怎么办呢?

    2、Bundle(实际就是一个文件夹)

    根据上面说到的可以得出,静态库(.a)库没有bundle的存在,无法使用(.xib)文件,根据平时正常工程中使用本地文件例如(.xib)需要用到NSBundle外,本地的图片或者(.txt)等也是需要用到,这些文件在静态库中,都需要放到创建的bundle中,这样,编译的时候才能编译到。


    这里写图片描述
    这里写图片描述
    因为IOS那类没有Bundle选择,故选择macOS里边的,创建后,需要设置一下Build Settings里边的Base SDK
    这里写图片描述
    然后Bundle的build的路径也参照前面的设置,将其改变。
    设置在编译主target(.a)库的前面,先编译Bundle
    这里写图片描述
    然后选中刚才的(.xib),勾上target关联到Bundle,再编译
    这里写图片描述
    这里写图片描述
    这里写图片描述


    注:如果静态库中不需要使用到(.xib)或者图片等文件时,Bundle不是必须的。


    3、关联工程

    静态库和Bundle都创建好,并且配置编译通过后,接下来就是如何关联到需要用到的工程中去了


    首先,在其它工程我们需要用到(.a)库,但是我们不想像一般情况那样子直接将它拖到工程中去,弊端上面有说到。所以需要将主工程与静态库建立依赖:

    • 将主工程和静态库工程放到同一目录下(方便路径关联)
      同一目录

    • 将编译后的Bundle用引用的方式导入主工程(因为Bundle内的文件不会根据编译环境变化,比较固定,直接引用)
      编译后的Bundle
      引用方式导入

    • 设置动态依赖关联静态库(Build Settings -> Library Search Paths)

    Debug:$(SRCROOT)/../ToolProject/Build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
    Release:$(SRCROOT)/../ToolProject/Build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

    关联上静态库编译后的文件

    • Other Linker Flags(重点介绍一下)
      在使用第三方静态库的时候,一般会提醒在Other Linker Flags里边配置“-ObjC”或者“-all_load”或者“-force_load”,它们的作用是:
      • -ObjC
        告诉链接器将库中的Objective-C类和Category类都加载进来(命名不重复的类),但是这样子做有个弊端。没有用到的类也都加载进来了,APP会变大。而且当库中只存在Category类时,“-ObjC”就不起作用了
      • -all_load
        强制将所有类都加载进来,能解决只存在Category类的情况。但是,引用多个静态库时,它们之中可能存在重命名的类别,这样子会有问题
      • -force_load
        它所做的事情和“-all_load”差不多,但是它能指定完全加载某个静态库,而不影响其它的库。
        *
      • 所以建议“-ObjC”和“-force_load”结合使用

      配置Other Linker Flags
    • 上面说过,静态库使用需要结合头文件,所以需要设置搜索头文件的路径
    $(SRCROOT)/../ToolProject/Build/ToolProject/Headers/
    ![头文件路径的设置](https://img-blog.csdn.net/20170726092850996?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGh5a3k=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

    注:以上静态库或者头文件路径的设置都是看实际存放的路径的,前面一直强调更改它们的路径就是这个原因。

    • 到这里基本配置就完成了,你会发现在主工程中也可以使用依赖库中的东西了。
      运行成功

    4、脚本的配置

    完成了上面的操作后是可以正常使用了,但是,当你clean了静态库后,你会发现,你得重新Build一下,否则无法直接运行主工程,原因,应该大家都懂,那有什么办法解决呢

    • Build Phase -> New Run Script Phase(要将Run Script放到Compile Sources 的编译前,原因是编译主工程前,需先编译最新的静态库)
      添加RunScript
      脚本配置
      脚本代码
    #!/bin/bash
    
    #进入脚本目录
    BASEDIR=$(dirname $0)
    cd $BASEDIR
    
    build_cmd='xcodebuild OTHER_CFLAGS="-fembed-bitcode" -target ToolProject -configuration '${CONFIGURATION}' -sdk '${SDK_NAME}
    echo '执行build命令:'${build_cmd}
    ${build_cmd}
    

    至此,基本介绍完静态库和Bundle的创建和使用。其中的不足和错漏,恳请斧正。

    展开全文
  • 在项目开发过程中,经常出现优秀代码重用现象...原因是:苹果公司禁止在iOS开发中使用动态库(而苹果自己却可以使用动态库),同时,苹果也从Xcode中移除了创建静态框架的功能。值得庆幸的是我们可以通过对Xcode进行小

    在项目开发过程中,经常出现优秀代码重用现象,又或者提供给第三方功能模块却又不想让其看到源代码,这些时候,通常的做法是将代码封装成库或者框架,这些在Windows编程或Linux编程中非常容易实现的过程,在iOS开发中却遇到了麻烦,原因是:苹果公司禁止在iOS开发中使用动态库(而苹果自己却可以使用动态库),同时,苹果也从Xcode中移除了创建静态框架的功能。值得庆幸的是我们可以通过对Xcode进行小小的改动来创建静态框架,而静态库和静态框架是被App Store所允许的,其实静态框架本质上说也是静态库的一种。

     

    在正式的上代码之前,先介绍一些从网上搜集的静态库相关的基本概念,以加深对后面知识的理解

    1.  库

           库实际上是一种代码共享的方式,主要用于代码重用和源码隐藏,通常分为动态库和静态库。

    2.  区别

           静态库:链接时完整的拷贝至可执行文件中,被多次使用就有多份冗余拷贝。

           动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存空间。

    3. iOS中静态库的形式

           在iOS中静态库以.a和.framework的形式存在,动态库以.dylib和.framework的形式存在。

           之所以.framework既可能是动态库又可能是静态库,是因为苹果公司禁止用户级App使用动态库,而自己却又堂而皇之的使用动态库,这就造成了iOS中系统级的.framework是动态库,用户级的.framework是静态库(无可奈何啊)。

    4. .a与.framework的区别

            二者区别不大,.a是纯二进制文件,.a文件不能单独使用,至少要有.h文件配合,而.framework除了二进制文件外,还包含一些资源文件(头文件,plist等),由于自身包含了头文件,所以.framework可以单独使用。

    5. 静态库使用的必要性

        1>.  代码的共享与重用

        2>.  程序模块化

        3>.  分享给别人代码库时代码隐藏

        4>.  开发第三方SDK

    6. 对图片资源和UI界面xib或nib文件的处理

               .a和.framework两种静态库,通常都是把需要用的到图片或者xib文件存放在一个bundle文件中,而该bundle文件的名字和.a或.framework的名字相同。关于bundle文件的制作方法,后面有专门介绍。

        有个疑问:

               .a文件中无法存放图片或xib文件,很容易理解,但是.framework从本质上说也是一个bundle文件,为什么不把图片或者xib文件直接放在.framework中而单独再创建个bundle文件呢?

               那是因为iOS系统不会去扫描.framework下的图片等资源文件,也不会在项目中显示,也就是说即使放在.framework目录下,系统根本就不会去扫描,因此也无法发现使用。

    7. category的处理

           category是项目开发中经常用到的,把category打包成静态库是没有问题的,但是在使用这个静态库时,调用category中的方法时会发生找不到该方法的运行时错误(selector not recognized),解决的办法是在使用静态库的工程中配置other linker flags的值为 -ObjC  -all_load


    转载连接:http://www.cnblogs.com/mylizh/p/3971428.html
    展开全文
  • 1.打包framework静态库 之前打包静态库好多步骤记不太清楚了,发现网上给的资料各种各样,好多坑不清楚,而且不太全面,所以自己整理了下资料,供大家参考,细节不足之处还望指正. ...• 我们分别选择 Generic iOS D...
  • 我们可以把一些不愿意让别人见到的代码,用静态库的方式把它隐藏起来,只留下.h文件显示方法供编程人员使用。而.a文件出了静态库本身外,还需要引入.h文件,而.framework就不需要如此,由于.framework的方便性所以...
  • iOS库 .a与.framework区别

    2017-10-31 18:03:45
    静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。 三、iOS里静态库形式? ...
  • iOS 打包静态库.a文件

    2015-10-28 09:14:21
    3、将需要暴露的.h文件暴露出来,.m会自动编译到.a文件中 4、分别选择真机设备和模拟器,command + B编译,staticTest会从红色变成黑色。真机和模拟器环境下用的.a文件是分开的。 5、在“Show in Finder ”,可以...
  • unable to load script from assets ‘index.android bundle’ ,make sure your bundle is packaged correctly or youu’re runing a packager server 解决办法 1 在 android/app/src/main 目录下创建一个 assets...
  • 打包.framework可以参考文章《将使用了CocoaPods的IOS项目打包为Framework+打包后的测试+PrefixHeader.pch使用》 打包.bundle可以参考文章《IOS项目打包bundle》 问题描述: 使用静态库项目已经将.framework、....
  • iOS架构-静态库.a的打包及使用(一) iOS架构-静态库.a的脚本化打包及使用(二) 资源文件主要包括:xib、图片以及其他文件资源(json、string等)。这里主要介绍 xib、图片。其他的资源和图片打包使用类似。 ...
  • 我们可以把一些不愿意让别人见到的代码,用静态库的方式把它隐藏起来,只留下.h文件显示方法供编程人员使用。而.a文件出了静态库本身外,还需要引入.h文件,而.framework就不需要如此,由于.framework的方便性所以...
  • iOS开发笔记-Bundle

    2015-09-27 09:47:27
    在我们使用第三方框架时,常常看到XXX.bundle的文件。 我们找到该文件,显示包内容,大致看到很多资源文件:图片、配置文本、XIB文件…… 什么是Bundle文件? 简单理解,就是资源文件包。我们将许多图片、XIB...
  • 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。 三、iOS里静态库形式? ...
  • 前言: React-Native的第一个HelloWorld工程,大多数人都能跑起来,可也有一部分人卡在第一个工程,就是难以跑出正确的界面,干着急… 我这里给出我遇到的坑,希望能够帮助你,首先,给出我现在的开发环境版本: ...
  • 但是当你的模块中需要大量使用xib,图片,音频或者其他资源文件时,无法添加至静态库。这个时候就需要将一些资源文件封装至.Bundle文件中。那么封装好的东西应该含有三类文件: 1:开放的头文件(包含完整的调用...
  • 就是使用Settings Bundle。在按了HOME键的情况下,在第一页的图标中找到设置,会看到程序的设置都在这里。那如何添加自己的程序的设置项呢?1、添加设置项默认情况下,新建的项目程序是没有设置项的。新建一个项目,...
1 2 3 4 5 ... 20
收藏数 29,054
精华内容 11,621
热门标签