ios编译dylib,支持苹果手机编译java文件的APP

1,支持苹果手机编译java文件的APP你还虎禒港溉蕃防歌狮攻饯是学Java,因为安卓是用Java编写,涉及系统底层的时候才会用到cplus , 只是单纯的开f软件的话有Java够了…app的中文翻译就是软件的意思,任何一款手机都能安装软件哦
2,22 iOS二进制文件类型个人笔记 在iOS逆向工程初学阶段 , 我们的目标主要是Application 、 Dynamic Library(以下简称dylib) 和Daemon 这三类二进制文件,对它们的了解越深入,逆向工程就会越顺利 。这三类文件分工不同,其目录 结构和文件权限也有一些区别 。Application就是我们最熟悉的App了 。了解下面的几个App相关概念 , 是开始逆向工程前的必备工作 。在Xcode工程里导入的各种framework,链接的各种lib,其实本质都是dylib 。如果把焦点转移到越狱iOS中 , Cydia里的各种tweak无一不是以dylib的形式工作的,正是这些tweak的存在让我们能够随意定制自己的iOS 。在逆向工程中,我们会频繁接触各种dylib,因此有必要了解一些相关知识 。在iOS中,lib分为static和dynamic两种,其中staticlib在编译阶段成为App可执行文件的一部分 , 会增加可执行文件的大小 。因为App尺寸变大,启动时需要加载的内容变多,所以可能会导致App启动变慢 。dylib则相对“智能”一些,它不会改变可执行文件的大小 , 只有当App需要用到这个dylib时,iOS才会把它加载进内存,成为App进程的一部分 。值得一提的是,dylib虽然充斥在iOS的各个角落,是逆向工程的重要目标类型,但其本身并不是可执行文件,不能独立运行,只能为别的进程服务,而且它们寄生在别的进程里 , 成为了这个进程的一部分 。因此,dylib的权限是由它寄生的那个App决定的,同一个dylib寄生在系统App和StoreApp里时的权限是不同的 。例如,你写了一个Instagram的tweak,用来把喜欢的图片保存在本地,如果保存目录是 /var/mobile/Containers/Data/ 下App对应的Documents目录,那么因为Instagram是一个StoreApp,这样的操作是没有问题的,tweak能够正常工作 。而如果保存目录是 /var/mobile/Documents,那么在兴高采烈地保存了一大堆美图,准备回头细细品味时,你就会发现/var/mobile/Documents里啥图片也没有——操作都被sandbox给禁掉了 。Daemon为后台运行而生,给用户提供了各种“守护”,如imagent保障了iMessage的正确收发,mediaserverd处理了几乎所有的音频、视频,syslogd则用于记录系统日志等 。iOS中的daemon主要由一个可执行文件和一个plist文件构成 。iOS的根进程是launchd,它会在开机时检查/System/Library/LaunchDaemons和/Library/LaunchDaemons下所有格式符合规定的plist文件,然后启动对应的daemon 。
3,ios dylib文件在什么位置dylib?这个好像一般是程序里面的某个文件的扩展名,记得wefit里面就有这种扩展名的文件好像是程序的运行库,不是安装格式可以用dyld函数动态加载 。要把dylib放在document文件夹内的话 , 修改安装目录即可,第一次启动要自己copy出去哦 。【ios编译dylib,支持苹果手机编译java文件的APP】
4 , iOS 编译报错怎么办Undefined symbols for architecture x86_64:"_OBJC_CLASS_$_QQApiInterface", referenced from:objc-class-ref in AppDelegate.o"_OBJC_CLASS_$_ShareSDK", referenced from:objc-class-ref in AppDelegate.oobjc-class-ref in RecipeDetailViewController.oobjc-class-ref in showViewController.oobjc-class-ref in video_show.o"_OBJC_CLASS_$_TencentOAuth", referenced from:objc-class-ref in AppDelegate.o"_OBJC_CLASS_$_WXApi", referenced from:objc-class-ref in AppDelegate.o1.把1.选中Targets—>Build Settings—>Architectures 。把build active architectures only 改为 NO 。2. 把最下面的Valid Architectures中的arm64参数删掉就可以了或者:双击Architectures,选择other , 删除$(ARCH_STANDARD),然后增加armv7和armv7s(写上:$(ARCHS_STANDARD_32_BIT)) 。3.clean 再build 。一、报错与警报1、错误代码:No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=armv7 armv7s)build 这个target的时候命令行报错 。可以在 build setting 中,搜索bitcode,并吧 enable bitcode 设置为 NO.2、ld:framework not found IOKit终端输入以下2行内容:cd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/IOKit.frameworksudo ln -s Versions/A/IOKit .其中,如果不行,从文件夹中慢慢打开看下路径对不对,如果像有修改Xcode名称的,注意如 “xcode 5”[有空格" “的记得在终端中加上 “\”这个符号];3、程序没问题,运行报错:Directory not empty位于/Users/你电脑名/Library/Developer/Xcode/DerivedData下的缓存文件占很大的缓存空间,如果长时间不删除xcode下的缓存文件,就会导致硬盘空间越来越小直到Directory not empty 。删除了缓存文件再运行就不会再报错 。或者 , 直接clean一次就可以了 。4、如果遇到编译错误类似:Undefined symbols for architecture armv7:"_OBJC_CLASS_$_ASIHTTPRequest",先检查上述的依赖代码是否已加入编译列表,如未加入,依次点击Target->Build Phases->Compile Sources,点击底部“+”添加上述代码 。如果遇到编译错误类似:Undefined symbols for architecture armv7:"_inflateEnd", referenced from , 则应该是缺少依赖libz.dylib,添加方法:依次点击Target->Build Phases->Compile Sources,点击底部“+”,在弹出的列表中输入libz , 添加搜索结果中最新版本即可 。5.but did not return a nonzero exit code to indicate failure日志类似:解决:选择 Build Settings 菜单,把compress PNG files 改成NO 。6.Undefined symbols for architecture i386:日志类似:(缺少BJGKPaintMapViewController文件的引用)原因:xcode项目import文件时,会根据project.pbxproj来查找,查找不到文件的引用则会有上述的错误 。图中就是BJGKPaintCommand文件对BJGKPaintMapViewController类的引用找不到 。常常在多人合作开发的时候,svn提交不规范导致的project.pbxproj发生错误,使得文件的引用不在project.pbxproj文件中 。解决方案:a.点击Build Phases,如果是缺少的xxx是类名,则在Complie Sources中加入该文件 。若缺少类库,则在Link Binary With Libraries中加入该类库 。例如图中是缺少 “BJGKPaintMapViewController”,这个是类名 。b.或者直接把需要引用这个缺少类/库的原文件去掉引用 , 笔者就是多调用了BJGKPaintCommand类文件,所以把它去掉,也就不需要补上BJGKPaintMapViewController类的引用了 。---第6点 2016年08月25日补充---遇到类似以下报错:Undefined symbols for architecture i386:"_sqlite3_bind_blob", referenced from:-[FMDatabase bindObject:toColumn:inStatement:]inFMDatabase.o"_sqlite3_bind_double", referenced from:-[FMDatabase bindObject:toColumn:inStatement:]inFMDatabase.o"_sqlite3_bind_int", referenced from:-[FMDatabase bindObject:toColumn:inStatement:]inFMDatabase.o"_sqlite3_bind_int64", referenced from:-[FMDatabase bindObject:toColumn:inStatement:]inFMDatabase.o"_sqlite3_bind_null", referenced from:-[FMDatabase bindObject:toColumn:inStatement:]inFMDatabase.o"_sqlite3_bind_parameter_count", referenced from:-[FMDatabase executeQuery:withArgumentsInArray:orDictionary:orVAList:]inFMDatabase.o-[FMDatabase executeUpdate:error:withArgumentsInArray:orDictionary:orVAList:]inFMDatabase.o.........上面的意思是Link Binary With Libraries 中没有添加 “libsqlite3.dylib”,但是Xcode7中只有对应的“*.tbd” , 而没有“*.dylib库” , 怎么办呢?方法①:“Link Binary With Libraries”中点击 “+” , 点“Add Other”,这时候按下“Command+Shift+G” , 输入“/usr/lib”进行搜索,可以看到 “libsqlite3.dylib”,双击添加完毕 。方法②:点项目,TAGERT -> Build Setting -> Lingking -> Other Linker Flag  , 在里面添加一行字符: “-lsqlite3” 。添加完毕 。7、问题: ld/ warning/ directory not found for option从项目中删除了某个目录、文件以后,编译出现警告信息:ld: warning: directory not found for option“XXXXXX”:有时候已经从项目中删除了文件和文件夹还是报这个警告,虽然没有发生错误,但是看着很不舒服 。。去掉警告的办法如下:1选择工程, 编译的 (targets)2选择 Build Settings 菜单3如下查找 Library Search Paths 和 Framework Search Paths, 删掉编译报warning的路径即OK 。5,苹果手机上有什么编程用的IDE建议你使用xcode,因为这是苹果官方发布的ide,只有用这个ide制作的程序才被苹果许可,其他软件制作出来的程序可能会卡审核 。如果只学过c++那很快就能转到objective-c 。首先需要看objective-c的教程 , 然后看《ipad 与 iphone4开发》这本书,看完这两部分基本就可以进行一些简单的开发了搜一下:苹果手机上有什么编程用的IDE6,如何通过makefile在iphone下创建dylib1、首先打开手机桌面的“设置”,进入之后通过滑动菜单,找到“icloud”选项 。2、icloud的设置界面有很多选项 , 已经有帐号的可以直接在Apple ID和密码中输入即可登录,而没有Apple ID的则需要创建 。选择界面最后的“免费获取Apple ID” 。3、在弹出的生日日期设置窗口中选则好自己的生日 , 跳转到下一步 。备注:日期可以不是真实的,但必须是要自己能记住的4、这时会要求设置姓名,输入自己的姓名即可,设置好之后点击右上角的“下一步” 。5、这时候会要求设置作为帐号的邮箱地址,分别有两个选项“使用您当前的电子邮件地址”和“获取免费的icloud电子邮件地址” 。6、选择前者则可以使用自己已经有点邮箱作为AppleID的帐号,如QQ、126、163、新浪等,而选择后者的话将自动为申请者申请一个icloud的邮箱地址,建议选择前者,毕竟邮箱多了要一个个记住也是一件麻烦的事 。设置好之后到达下一步 。7、在这里以“使用您当前的电子邮件地址”为例子,输入自己的任意一个邮箱帐号即可 。点击下一步 。8、在新的界面中会要求你输入Apple ID的密码,想好自己要设置的密码,分别输入后再确认输入一次即可 。备注:Apple ID的密码要求至少8位字符且包含大小写字母 。9、然后会进入问题设置界面 , 按照提示选择三个问题,并输入答案即可 。备注:密保问题的作用是当忘记Apple ID的时候可以用于找回密码,因此必须要记住三个密保问题的答案 。10、当设置好三个密保问题之后会要求输入一个救援电子邮箱,其作用也和上面的三个密保问题一样,用于防治忘记Apple ID的密码,因此需要记住自己输入的救援电子邮箱 。备注:救援电子邮箱必须是有效可用的 。11、此界面无什么作用,直接默认后点击下一步即可 。12、此时会弹出Apple的协议和条款的确认窗口,也没多大用处,直接点击右下角“同意”即可 。13、已以基本要完成了 , 界面会显示正在创建AppleID账户 。14、完成创建之后会回到icloud的验证界面,此步骤的作用就是验证刚才用于Apple ID帐号的邮箱地址是否正确 。15、这时候直接在手机或者电脑浏览器上登录第5步中输入的邮箱,会受到一封苹果发来的确认邮件,按照里面的提示 , 验证之后就可以 。这时再打开手机就会发现帐号已经被激活 , 可以使用了 。16、最后 , 在下载app或者其他设置的时候直接按照提示输入密码或同一选项即可 。

    推荐阅读