iOS入门学习

279 阅读5分钟

Apple开源

github.com.apple:包含 Swift语言和swift-package-manager swift-foundation swift-nio等Swift组件库

opensource.apple.com:苹果专门设计的一个开源官网, 列出了苹果主导和参与的一些开源库

apple-oss-distributions:iOS/MacOS 系统组件库, 包括内核xnu、动态链接器dyld、objc4(runtime) GCD(libdispatch), 和各个系统组件库

开发环境

xcode

Xcode是苹果公司提供的集成开发环境(IDE),用于开发iOS、macOS、watchOS和tvOS应用程序。它是iOS开发的主要工具,为开发者提供了一套丰富的工具和功能,用于编写、调试和部署应用程序。

Homebrew

Brew(全称Homebrew)是一个流行的包管理器,用于在 macOS 操作系统上安装和管理软件包。它允许用户通过命令行界面来快速安装、更新和卸载各种开源软件和工具。

安装Homebrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

添加环境变量(.bash_profile)

export PATH="/opt/homebrew/bin:$PATH"

查看版本

brew --version

使用brew安装各种软件包

brew install <package-name>

请注意,安装 Brew 需要在终端中执行命令,所以请确保具有管理员权限或正确的用户权限来执行安装过程

RVM

RVM(Ruby Version Manager)是一个用于管理Ruby版本的工具,它允许在同一台计算机上安装和切换不同版本的Ruby。

安装设置RVM

curl -L https://get.rvm.io | bash -s stable

添加环境变量(.bash_profile)

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

查看版本

rvm -v

Ruby

Ruby是一种动态、开源的脚本语言,在使用CocoaPods时,需要安装Ruby并使用Ruby的Gem包管理器来安装和管理CocoaPods。

使用brew安装ruby

brew install ruby

也可以指定版本

brew install ruby@3.1

使用rvm安装ruby指定版本

rvm install x.x.x

添加环境变量(.bash_profile)

export PATH="/usr/local/opt/ruby/bin:$PATH"

查看ruby目录

which -a ruby

查看版本

ruby --version

RubyGems

RubyGems是一个用于Ruby编程语言的包管理系统和软件库。它是Ruby社区中广泛使用的官方包管理器,用于安装、管理和发布Ruby库(也称为Gem)。

升级到最新RubyGems

gem update --system

查看版本

gem --version

查看环境配置

gem environment

安装指定的 gem

gem install <gem_name>

卸载指定的 gem

gem uninstall <gem_name>

更新指定的 gem

gem update <gem_name>

列出已安装的 gems

gem list

CocoaPods

在iOS开发中,CocoaPods是一个流行的依赖管理工具,用于管理和集成第三方库和框架到iOS项目中。它简化了在iOS应用程序中使用外部库的过程,使开发人员能够更轻松地管理项目的依赖关系。

安装cocoapods

sudo gem install cocoapods

重新安装或者升级

sudo gem install cocoapods --pre

查看版本

pod --version

查看目录

which pod

清空所有的缓存

pod cache clean --all

安装第三方依赖(安装新的第三方库,即使已经有一个Podfile)

cd ios
pod install

注意,如果通过 pod --version 能看到对应版本,但执行pop install 后仍出现 zsh: command not found: pop,则可以通过which pod检查下pop的安装目录再执行命令,例如:/Users/xxx/.rbenv/shims/pod install

更新第三方依赖(更新第三方库)

pod update

注意:打开项目时,请使用 Xcode 打开生成的 Runner.xcworkspace 文件,而不是原来的 Runner.xcodeproj 文件。这样才可以正常在项目中使用安装的第三方库,否则可能会报错,项目无法编译。

每当需要添加、更新或删除第三方库时,只需编辑 Podfile 文件并再次运行 pod install 命令即可。CocoaPods 会重新安装依赖库,并更新项目配置。

环境变量配置

演示完整的环境变量配置,这里以我自己的环境配置为例,修改文件 /Users/xxx/.bashrc

export PATH=${PATH}:/Users/xxx/Desktop/flutter/bin
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
export ANDROID_HOME=/Users/xxx/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
export GRADLE_HOME=/Users/xxx/.gradle/wrapper/dists/gradle-6.5-all/2oz4ud9k3tuxjg84bbf55q0tn/gradle-6.5
export PATH=$PATH:$GRADLE_HOME/bin

export PATH="/opt/homebrew/bin:$PATH"
export PATH="/usr/local/opt/ruby/bin:$PATH"
export PATH="$HOME/.rbenv/bin:$PATH"

eval "$(rbenv init -)"

echo "alias python=/usr/bin/python3" >> ~/.zshrcalias python=/usr/bin/python3

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

修改文件/Users/xxx/.zshrc

source ~/.bash_profile

遇到的一些问题

问题一

日志信息:zsh: command not found

解决方案:提示命令不存在,需要检查环境变量是否配置正确。.bash_profile 是一个隐藏的配置文件,主要是用来配置bash shell的,我们可以在.bash_profile文件中配置环境变量。

但是随后会发现,在 ~/.bash_profile 中配置环境变量,可是每次重启终端后配置又不生效了,需要重新执行 : $source ~/.bash_profile后才会生效。这是因为从 macOS Catalina 版开始,Mac 将使用 zsh 作为默认登录 Shell 和交互式 Shell,所以还需要在 .zshrc 文件中添加 source ~/.bash_profile即可生效。

source ~/.bash_profile

问题二

日志信息:While executing gem ... (Gem::FilePermissionError)

You don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory.

解决方案:在终端中,使用 sudo 可以通过管理员权限来执行某个命令

 sudo gem install cocoapods -v x.x.x

问题三

日志信息:warning: Insecure world writable dir /opt/homebrew/bin in PATH,mode 040777

系统的ruby 2.6.0 版本太低,于是就升级ruby,发现通过homebrew升级的 ruby 并没有覆盖成功

解决方案:

第一步:首先安装 rbenv

brew install rbenv

第二步:需要在文件~/.zshrc中加入如下语句,否则rbenv无法成功修改系统的ruby版本:

export PATH="$HOME/.rbenv/bin:$PATH" eval "$(rbenv init -)" 

第三步:添加完成后,安装ruby指定版本,并指定默认使用的版本

rbenv install x.x.x 
rbenv global x.x.x

执行成功后查看系统默认版本

ruby --version

刚开始未生效,然后重启终端,再次输出版本就可以了。

问题四

日志信息:Flutter: CocoaPods's specs repository is too out-of-date to satisfy dependencies

解决方案:

  1. flutter clean
  2. Delete /ios/Pods
  3. Delete /ios/Podfile.lock
  4. flutter pub get
  5. from inside ios folder: pod install
  6. flutter run

问题五

日志信息:/Users/xxx/Desktop/iOSProjects/XXX/xxx.xcodeproj Signing for "xxx" requires a development team. Select a development team in the Signing & Capabilities editor.

解决方案:在签名和功能编辑器中选择开发团队

问题六

日志信息:[!] No `Podfile' found in the project directory.

解决方案:这是因为首次在依赖第三方库的时候,项目中并不存在Podfile文件,所以首次需要先创建该文件

cd ios
pod init

将以下内容写入到Podfile文件中 (vim Podfile)

source 'https://github.com/CocoaPods/Specs.git'

# 将依赖库以动态框架的形式引入到项目中
use_frameworks!
# 将依赖库的头文件以模块化的方式进行引入
use_modular_headers!
# 禁止在编译依赖库时产生警告信息
inhibit_all_warnings!

# Uncomment this line to define a global platform for your project
platform :ios, '11.0'

# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'


target '项目名称' do
  use_frameworks!
  use_modular_headers!
  # 依赖网络请求库,并指定版本
  # https://github.com/Alamofire/Alamofire
  pod 'Alamofire' , '~> 5.8.0'
end

这里以依赖网络库Alamofire为例,依赖好需要的第三方库之后,然后在执行命令 pop install

依赖完成之后,记得使用xxx.xcworkspace打开项目,这个时候就可以看到项目中依赖配置和第三方库的源代码

问题七

日志信息:使用pop install依赖第三方库,然后一直卡在此处,Cloning spec repo cocoapods from https://github.com/CocoaPods/Specs.git

解决方案:手动替换仓库,去GitHub手动下载,或者一直耐心的等...

问题八

日志信息:An error occurred while processing the post-install hook of the Podfile.

解决方案:Xcodeproj是CocoaPods用ruby开发的一个插件库,可以用来新建、修改Xcode工程。执行以下命令之后,重新再执行 pod install

gem install xcodeproj

问题九

日志信息:ruby3.2删除了对 exists 的支持,导致出现 undefined method `exists?' for File:Class

解决方案:把ruby的版本号降为3.1.2,重新安装cocoapods

打包版本发布

第一步,选择Product > Archive

如果Archive选项是灰色且无法点击,这是因为项目没有签名证书。选择 Xcode -> Preferences -> Accounts,确保开发者账号已经添加到 Xcode 中,选择好正确的 Team。

第二步,选择Distribute App

Distribute App(分发应用程序):将应用程序准备好并发布到 App Store 或其他分发渠道,使其可供用户下载和安装的过程。

Validate App(验证应用程序):在将应用程序提交到 App Store 之前,对应用程序进行验证的过程。

第三步,这里我们就以给测试人员打包为例,选择Ad Hoc,然后一直下一步...最后一步导出文件xxx.ipa,然后把它上传到蒲公英之后,就可以提供下载链接给内部测试人员下载测试了。