Xcode

前言

打包deb 最好使用sudo 来获取root权限或者使用fakeroot ,因为像/usr/bin 这中目录需要里面的文件所有者必须是root。

fakeroot的实现:
1、fakeroot仅仅是简单的shell script。简单来说fakeroot做下面的事情。
 * 启动faked,获取FAKEROOTKEY * 设置环境变量FAKEROOTKEY,LD_LIBRARY_PATH,LD_PRELOAD。执行命令(默认是shell)
2、faked是管理虚拟的文件所有者,文件权限信息的守护进程。 在fakeroot中执行的命令会加载由LD_LIBRARY_PATH,LD_PRELOAD环境变量指定的一个动态链接库(/usr/lib/libfakeroot/libfakeroot-sysv.so)
3、LD_LIBRARY_PATH=/usr/lib/libfakeroot LD_PRELOAD=libfakeroot-sysv.so
4、libfakeroot-sysv.so导出了chown()等函数,这些函数会使用FAKEROOTKEY与faked通讯,返回虚拟的所有者与权限信息。

小结:例如Debian生成package这样,在必须使用root的时候,使用fakeroot模拟root权限。fakeroot使用libfakeroot-sysv.so库文件中的函数与faked通讯管理文件权限信息。

NSLog

  • Console– 自从调试iOS10 之后,就喜欢用这个
    mac 下的 Console 程序也可以直接看设备的 NSLog
    

xcworkspace

  • 修改工作空间包含的工程内容 xcworkspace/contents.xcworkspacedata
<FileRef
location = "group:name/name.xcodeproj">
</FileRef>
  • 查看当前Xcode版本
devzkndeMacBook-Pro:guangyouqian devzkn$ gcc --version
Configured with: --prefix=/Applications/Xcode9.1.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode9.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/c++/4.2.1
Apple LLVM version 9.0.0 (clang-900.0.38)
Target: x86_64-apple-darwin17.2.0
Thread model: posix
InstalledDir: /Applications/Xcode9.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
  • xcode-select
devzkndeMacBook-Pro:guangyouqian devzkn$ sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
  • xcodebuild

devzkndeMacBook-Pro:guangyouqian devzkn$ sudo xcodebuild -license

mac 的快捷键设置 辅助开发效率

  • 打开系统设置的keyboard 窗口中有一个shortcuts 选项可以设置一些牛逼的快捷功能
    # 在Services 中开启 new Terminal at Folder  等系统功能以及对应的快捷键
    
  • 快捷键开启touch bar
    #前天macOS 10.12.1  + Xcode
    打开Xcode 使用shift+ command+5
    
  • 常用快捷键
    shift +command+N 创建目录
    

build phases

  • -fno-objc-arc
    [self onNextButtonClicked:nil];
添加此参数到编译参数中(build phases-》compile sources 的对应.m),可以避免没有调用没有声明方法的保存警告

dpkg-deb

  • Layout/debian/postinst: 对应目录文件/var/lib/dpkg/info/**postinst
    如果使用theos 的tweak,postinst 必须放在Layout/debian 下面,且debian 名称必须小写;
    如果是使用dpkg-deb -Zgzip -b 的话,postinst 的目录可以放在大写的debian
    
  • 查找postinst
    iPhone:/var/lib/dpkg/info root# ls -lrt  *postinst
    -rwxr-xr-x 1 root   wheel     91 Mar 27  2011 app.weiphone.wecydia.icons.postinst
    -rwxr-xr-x 1 root   wheel    449 Jan  3  2017 com.rpetrich.rocketbootstrap.postinst
    -rwxr-xr-x 1 mobile staff 198128 Feb 14  2017 net.angelxwind.appsyncunified.postinst
    -rwxr-xr-x 1 root   wheel 135040 Feb 16  2017 cydia.postinst
    -rwxr-xr-x 1 mobile admin    993 Jun 24  2017 com.touchelf.app.postinst
    -rwxr-xr-x 1 root   wheel   1366 Jul 19  2017 com.touchsprite.ios.postinst
    
  • 查找preinst 等脚本
iPhone:/var/lib/dpkg/info root# ls -lrt com.touchsprite.ios*
---------- 1 root wheel   116 Jul 19  2017 com.touchsprite.ios.prerm
-rwxr-xr-x 1 root wheel   238 Jul 19  2017 com.touchsprite.ios.preinst
---------- 1 root wheel   258 Jul 19  2017 com.touchsprite.ios.postrm
-rwxr-xr-x 1 root wheel  1366 Jul 19  2017 com.touchsprite.ios.postinst
-rw-r--r-- 1 root wheel 46035 Aug 23  2017 com.touchsprite.ios.md5sums
-rw-r--r-- 1 root wheel 30695 Aug 23  2017 com.touchsprite.ios.list
  • 打包
    dpkg-deb -Zgzip -b ~/work/akno.git/Package ~/work/akno.git/com.akno.akno.deb
      <!-- @$(_THEOS_PLATFORM_DPKG_DEB) -b -Zgzip transitional/nodelete-net.angelxwind.appsync50plus debs/net.angelxwind.appsync50plus.deb -->
    
  • 解压deb包控制文件和常规文件
     dpkg-deb -R com.aun.ios_0.0.1-95+debug_iphoneos-arm.deb ./ayu
    
  • dpkg -r 卸载 com.ios.deb
    # dpkg -l 查询所有安装的包
    # devzkndeMBP: devzkn$ ssh usb2222 dpkg -r com.ios
    
  • 对二进制文件进行签名,或者使用 iResign对 ipa进行签名,就可以安装到非越狱的机器上
    codesign -f -s "iPhone Developer:xxx” —entitlements Entitlements.plist Wat.app
    
  • ldid命令查看签入的内容
    devzkndeMacBook-Pro:bin devzkn$ ldid -e /Users/devzkn/decrypted/AppStoreV10.2/Payload/AppStore.app/AppStore 
    

打包成ipa

  • xcrun
    xcrun -sdk iphoneos PackageApplication -v Wat.app -o ~/Wat.ipa
    
  • dylib进行签名
    codesign -f -s "iPhone Developer:xxx" xxx.dylib
    

plutil

tweak 的control文件

  • Filter字段
# 所有普通app 
{ Filter = { Bundles = ( "com.apple.UIKit" ); }; }

  • 格式

<key>Executables</key>
<array>
  <string>assntd</string>
</array>

  <key>Bundles</key>
<array>
  <string>com.apple.ios.SKitUIService</string>
</array>

SBWiFiManager

  • 发现网络异常,就关闭,或者打开Wi-Fi— hook SpringBoard
      [[objc_getClass("SBWiFiManager") sharedInstance] setWiFiEnabled:offOrOn];
    
  • 判断wifi是否开启
    [[SBWiFiManager sharedInstance ] wiFiEnabled]//YES //打开
    
  • 得到当前链接Wi-Fi 的名称
    [[SBWiFiManager sharedInstance ] currentNetworkName]
    
  • cy 测试SBWiFiManager 均可以成功
    cy#  [[objc_getClass("SBWiFiManager") sharedInstance] setPowered:NO];
    cy#  [[objc_getClass("SBWiFiManager") sharedInstance] setPowered:YES];
    cy#  [[objc_getClass("SBWiFiManager") sharedInstance] setWiFiEnabled:YES];
    cy#  [[objc_getClass("SBWiFiManager") sharedInstance] setWiFiEnabled:NO];
    

Q&A

  • dpkg: parse error, in file /var/lib/dpkg/updates/0000' near line 16 package com..’: EOF before value of field `Icon’ (missing final newline)
 <!-- 就可以解决 -->
 iPhone:/var/lib/dpkg/updates root# rm -rf * 
  • unable to execute decompressing archive member (xz):
    # 大部分原因是dpkg-deb版本不一致导致的 ,修改编译的命令
    dpkg-deb -Zgzip -b ~/work/akno.git/Package ~/work/akno.git/com.akno.akno.deb
    #  -Z<type>                         Set the compression type used when building.
                                      Allowed types: gzip, xz, bzip2, none.
    
  • This application’s application-identifier entitlement does not match that of the installed application. These values must match for an upgrade to be allowed
#这个项目App已经存在这个真机上了,这个App是旧的identifier运行的
解决方法:Xcode --->Window ---> Devices ---> 自己的真机 ---> installed Apps ----> 删除这个App  ----> 重新运行
  • usr/libexec/cydia/cydo returned an error code (2)

下载安装cydia

  • http://cydia.saurik.com/package/com.rpetrich.rocketbootstrap/
  • https://www.cydiamate.com/
  • https://www.cydiamate.com/ios101.html
  • 安装固件 (https://act.feng.com/wetools/index.php?r=iosRom/index)
    借助iTunes,按住option+update,选择固件。
    
  • iOS SSH 忘记密码解决办法
    iphone的账号密码存储在/private/etc/master.password这个文件里,只需要在编辑它就可以了。 使用ifiles打开这个文件,找到下面的行: root:xxxxxxxxxxxxx:0:0::0:0:System Administrator:/var/root:/bin/sh mobile:xxxxxxxxxxxxx:501:501::0:0:Mobile User:/var/mobile:/bin/sh
    将root: 及mobile:后面的13个x字符处修改成/smx7MYTQIi2M(注意是I是i的大写 )存此文件,你iphone的ssh密码就重新回到默认的:alpine
    
  • cydia/jailbreakd.m:19:10: fatal error: ‘sys/dir.h’ file not found
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include
    devzkndeMBP:include devzkn$ ls -l dir*
    -rw-r--r--  1 devzkn  admin  6688 Feb 16  2017 dirent.h
    //#include <sys/dir.h>
    #include <sys/dirent.h>
    

本人亲试成功

See also

转载请注明: > Xcode

在操作过程或者文章有问题的话欢迎在 原文 里提问或指正。

赞赏支持

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少
最近的文章

codeSnippets

前言正文上传验证码图片进行识别- 打码100 POST http://dama.a4a.cn/api/upload HTTP/1.1 AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer]; NSMutableURLRequest *request = [serializer multipartFormRequestWithMethod:@"POST" ...…

ios继续阅读
更早的文章

iOSOpenDevInstallFailed

前言 Com.apple.product-type.tool解决方法,通常Xcode9 和Xcode8 都会遇到这个问题,尤其是在开发 Command Line Tools的时候下载此文件夹 https://svn.webkit.org/repository/webkit/trunk/Tools/Scripts或者下载本帖附件解压然后运行 cd Scriptssudo ./configure-xcode-for-ios-developmentiOSOpenDevInstallFailed...…

iOSre继续阅读
更多