一 ruby 安裝ios
要安裝coocspod 首先須要安裝ruby,能夠先安裝xcode,在安裝macport 下載地址,最後執行命令 port install rubygit
CocoaPods是用Ruby實現的,要想使用它首先須要有Ruby的環境。幸運的是OS X系統默認的已經能夠運行Ruby了,所以咱們只須要執行如下命令:github
[objc] view plaincopyxcode
$ sudo gem install cocoapods ruby
CocoaPods是以Ruby gem包的形式被安裝的。在安裝執行的過程當中,可能會問咱們是否是更新rake,輸入y便可。這是由於rake gem包會在安裝的過程當中檢查更細,若是有可用的新版本就會出現剛纔的選項。markdown
在安裝進程結束的時候,執行命令:app
[objc] view plaincopy網站
$ pod setup ui
若是沒有報錯,就說明一切安裝就成功了!
url
這有多是由於Ruby的默認源使用的是cocoapods.org,國內訪問這個網址有時候會有問題,網上的一種解決方案是將遠替換成淘寶的,替換方式以下:
[objc] view plaincopy
$ gem sources --remove https://rubygems.org/
//等有反應以後再敲入如下命令
$ gem sources -a http://ruby.taobao.org/
要想驗證是否替換成功了,能夠執行:
[objc] view plaincopy
$ gem sources -l
正常的輸出是:
[objc] view plaincopy
*** CURRENT SOURCES ***
http://ruby.taobao.org/
gem是管理Ruby庫和程序的標準包,若是它的版本太低也可能致使安裝失敗,解決方案天然是升級gem,執行下述命令便可:
[objc] view plaincopy
$ sudo gem update --system
[objc] view plaincopy
/Users/wangzz/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:298:in `to_specs': Could not find 'cocoapods' (>= 0) among 6 total gem(s) (Gem::LoadError)
from /Users/wangzz/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:309:in `to_spec'
from /Users/wangzz/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_gem.rb:53:in `gem'
from /Users/wangzz/.rvm/rubies/ruby-1.9.3-p448/bin/pod:22:in `<main>'
這就是路徑設置的問題,能夠經過執行:
[objc] view plaincopy
$ rvm use ruby-1.9.3-p448
解決該問題。
升級很簡單,再次執行安裝命令便可:
[objc] view plaincopy
$ sudo gem install cocoapods
須要注意的是,若是安裝的時候使用了sudo,升級的時候同樣須要使用該關鍵字,否則升級完了之後又會出現路徑不匹配問題。
若是以前作的一切順利,接下來就能夠體驗體驗CocoaPods的神奇之處了,須要通過如下幾步:
爲了演示這個過程,我建立了一個名爲CocoaPodsTest的工程。
CocoaPods的一切都是從一個名爲Podfile的文件開始的,咱們須要先建立這個文件。我的習慣使用命令行,我會這樣作:
[objc] view plaincopy
$ cd /Users/wangzz/Desktop/CocoaPodsTest
$ touch Podfile
首先進入到工程的根目錄下,建立空白的Podfile文件,建立完畢的目錄結構以下圖:
PS:Podfile文件也能夠不放在工程的根目錄下,只是會稍微麻煩點,在下一篇文章中會有介紹,敬請關注。)
根據須要,咱們能夠在Podfile文件中寫入須要用到的第三方庫,以SBJson、AFNetworking、Reachability三個庫爲例,個人Podfile內容以下:
[objc] view plaincopy
platform :ios
pod 'Reachability', '~> 3.0.0'
pod 'SBJson', '~> 4.0.0'
platform :ios, '7.0'
pod 'AFNetworking', '~> 2.0'
準備工做都完成後,開始導入第三方庫:
[objc] view plaincopy
$ cd /Users/wangzz/Desktop/CocoaPodsTest
$ pod install
首先進入工程根目錄,而後執行pod install命令,CocoaPods就開始爲咱們作下載源碼、配置依賴關係、引入須要的framework等一些列工做,命令的執行結果打印出來以下:
[objc] view plaincopy
Analyzing dependencies
Downloading dependencies
Installing AFNetworking (2.1.0)
Installing JSONKit (1.5pre)
Installing Reachability (3.0.0)
Generating Pods project
Integrating client project
[!] From now on use `CocoaPodsTest.xcworkspace`.
這就說明pod install命令執行成功了。再來看看工程根目錄發生的變化,以下圖:
能夠看到,工程的根目錄下多了三個東西:CocoaPodsTest.xcworkspace、Podfile.lock文件和Pods目錄。
(PS:篇幅有限,Podfile.lock文件會放到系列文章的下一篇介紹,敬請關注。)
再看看剛纔執行完pod install命令打印出來的內容的最後一行:
[objc] view plaincopy
[!] From now on use `CocoaPodsTest.xcworkspace`.
提示咱們從如今起,咱們須要使用CocoaPodsTest.xcworkspace文件來開發。
對於工程發生的變化,有幾點須要說明:
第三方庫會被編譯成靜態庫供咱們正真的工程使用
CocoaPods會將全部的第三方庫以target的方式組成一個名爲Pods的工程,該工程就放在剛纔新生成的Pods目錄下。整個第三方庫工程會生成一個名稱爲libPods.a的靜態庫提供給咱們本身的CocoaPodsTest工程使用。
咱們的工程和第三方庫所在的工程會由一個新生成的workspace管理
爲了方便咱們直觀的管理工程和第三方庫,CocoaPodsTest工程和Pods工程會被以workspace的形式組織和管理,也就是咱們剛纔看到的CocoaPodsTest.xcworkspace文件。
原來的工程設置已經被更改了,這時候咱們直接打開原來的工程文件去編譯就會報錯,只能使用新生成的workspace來進行項目管理。
打開CocoaPodsTest.xcworkspace,界面以下:
上文講過,在開始使用CocoaPods,執行完pod install以後,會生成一個Podfile.lock文件。這個文件看起來跟咱們關係不大,實際上絕對不該該忽略它。
該文件用於保存已經安裝的Pods依賴庫的版本,經過CocoaPods安裝了SBJson、AFNetworking、Reachability三個POds依賴庫之後對應的Podfile.lock文件內容爲:
[objc] view plaincopy
PODS:
- AFNetworking (2.1.0):
- AFNetworking/NSURLConnection
- AFNetworking/NSURLSession
- AFNetworking/Reachability
- AFNetworking/Security
- AFNetworking/Serialization
- AFNetworking/UIKit
- AFNetworking/NSURLConnection (2.1.0):
- AFNetworking/Reachability
- AFNetworking/Security
- AFNetworking/Serialization
- AFNetworking/NSURLSession (2.1.0):
- AFNetworking/NSURLConnection
- AFNetworking/Reachability (2.1.0)
- AFNetworking/Security (2.1.0)
- AFNetworking/Serialization (2.1.0)
- AFNetworking/UIKit (2.1.0):
- AFNetworking/NSURLConnection
- Reachability (3.0.0)
- SBJson (4.0.0)
DEPENDENCIES:
- AFNetworking (~> 2.0)
- Reachability (~> 3.0.0)
- SBJson (~> 4.0.0)
SPEC CHECKSUMS:
AFNetworking: c7d7901a83f631414c7eda1737261f696101a5cd
Reachability: 500bd76bf6cd8ff2c6fb715fc5f44ef6e4c024f2
SBJson: f3c686806e8e36ab89e020189ac582ba26ec4220
COCOAPODS: 0.29.0
Podfile.lock文件最大得用處在於多人開發。對於沒有在Podfile中指定Pods依賴庫版本的寫法,以下:
[objc] view plaincopy
pod 'SBJson'
該句話用於獲取當前SBJson這個Pods依賴庫的最新版本。
當團隊中的某我的執行完pod install命令後,生成的Podfile.lock文件就記錄下了當時最新Pods依賴庫的版本,這時團隊中的其它人check下來這份包含Podfile.lock文件的工程之後,再去執行pod install命令時,獲取下來的Pods依賴庫的版本就和最開始用戶獲取到的版本一致。若是沒有Podfile.lock文件,後續全部用戶執行pod install命令都會獲取最新版本的SBJson,這就有可能形成同一個團隊使用的依賴庫版本不一致,這對團隊協做來講絕對是個災難!
在這種狀況下,若是團隊想使用當前最新版本的SBJson依賴庫,有兩種方案:
更改Podfile,使其指向最新版本的SBJson依賴庫;
執行pod update命令;
鑑於Podfile.lock文件對團隊協做如此重要,咱們須要將它添加到版本管理中。
對於普通用戶來講,使用CocoaPods咱們打交道最多的就是Podfile文件。CocoaPods是用ruby實現的,所以Podfile文件的語法就是ruby的語法。接着從如下幾個方面來介紹Podfile:
這是在上篇文章中,遺留的一個問題。一般狀況下咱們都推薦Podfile文件都放在工程根目錄,以下圖所示:
事實上Podfile文件能夠放在任意一個目錄下,須要作的是在Podfile中指定工程的路徑,和原來相比,Podfile文件就在最開始的位置增長了一行,具體內容以下:
[objc] view plaincopy
xcodeproj "/Users/wangzz/Desktop/CocoaPodsTest/CocoaPodsTest.xcodeproj"
platform :ios
pod 'Reachability', '~> 3.0.0'
pod 'SBJson', '~> 4.0.0'
platform :ios, '7.0'
pod 'AFNetworking', '~> 2.0'
指定路徑使用的是xcodeproj關鍵字。
此後,進入Podfile文件所在路徑,執行pod install命令就會和以前同樣下載這些Pods依賴庫,並且生成的相關文件都放在了Podfile所在目錄下面,以下圖:
和以前同樣,咱們仍然須要使用這裏生成的workspace文件打開工程。
Podfile本質上是用來描述Xcode工程中的targets用的。若是咱們不顯式指定Podfile對應的target,CocoaPods會建立一個名稱爲default的隱式target,會和咱們工程中的第一個target相對應。換句話說,若是在Podfile中沒有指定target,那麼只有工程裏的第一個target可以使用Podfile中描述的Pods依賴庫。
若是想在一個Podfile中同時描述project中的多個target,根據需求的不一樣,能夠有不一樣的實現方式。爲了說明問題,在原來的工程中再建立一個名稱爲Second的target,如今的project中包含的target有
①多個target中使用相同的Pods依賴庫
好比,名稱爲CocoaPodsTest的target和Second的target都須要使用Reachability、SBJson、AFNetworking三個Pods依賴庫,可使用link_with關鍵字來實現,將Podfile寫成以下方式:
[objc] view plaincopy
link_with 'CocoaPodsTest', 'Second'
platform :ios
pod 'Reachability', '~> 3.0.0'
pod 'SBJson', '~> 4.0.0'
platform :ios, '7.0'
pod 'AFNetworking', '~> 2.0'
這種寫法就實現了CocoaPodsTest和Second兩個target共用相同的Pods依賴庫。
②不一樣的target使用徹底不一樣的Pods依賴庫
CocoaPodsTest這個target使用的是Reachability、SBJson、AFNetworking三個依賴庫,但Second這個target只須要使用OpenUDID這一個依賴庫,這時可使用target關鍵字,Podfile的描述方式以下:
[objc] view plaincopy
target :'CocoaPodsTest' do
platform :ios
pod 'Reachability', '~> 3.0.0'
pod 'SBJson', '~> 4.0.0'
platform :ios, '7.0'
pod 'AFNetworking', '~> 2.0'
end
target :'Second' do
pod 'OpenUDID', '~> 1.0.0'
end
其中,do/end做爲開始和結束標識符。
再引入依賴庫時,須要顯示或隱式註明引用的依賴庫版本,具體寫法和表示含義以下:
[objc] view plaincopy
pod 'AFNetworking' //不顯式指定依賴庫版本,表示每次都獲取最新版本
pod 'AFNetworking', '2.0' //只使用2.0版本
pod 'AFNetworking', '> 2.0' //使用高於2.0的版本
pod 'AFNetworking', '>= 2.0' //使用大於或等於2.0的版本
pod 'AFNetworking', '< 2.0' //使用小於2.0的版本
pod 'AFNetworking', '<= 2.0' //使用小於或等於2.0的版本
pod 'AFNetworking', '~> 0.1.2' //使用大於等於0.1.2但小於0.2的版本
pod 'AFNetworking', '~>0.1' //使用大於等於0.1但小於1.0的版本
pod 'AFNetworking', '~>0' //高於0的版本,寫這個限制和什麼都不寫是一個效果,都表示使用最新版本
根據Podfile文件指定的內容,安裝依賴庫,若是有Podfile.lock文件並且對應的Podfile文件未被修改,則會根據Podfile.lock文件指定的版本安裝。
每次更新了Podfile文件時,都須要從新執行該命令,以便從新安裝Pods依賴庫。
若果Podfile中指定的依賴庫版本不是寫死的,當對應的依賴庫有了更新,不管有沒有Podfile.lock文件都會去獲取Podfile文件描述的容許獲取到的最新依賴庫版本。
命令格式爲:
[objc] view plaincopy
$ pod search OpenUDID
後面的OpenUDID爲參數。
從命令的名稱不難看出,該命令是用來按名稱搜索可用的Pods依賴庫,執行結果以下:
[objc] view plaincopy
-> OpenUDID (1.0.0)
Open source initiative for a universal and persistent UDID solution for iOS.
pod 'OpenUDID', '~> 1.0.0'
- Homepage: http://OpenUDID.org
- Source: https://github.com/ylechelle/OpenUDID.git
- Versions: 1.0.0 [master repo]
這裏咱們搜到了一條可用數據,裏面描述了OpenUDID庫的簡要信息。其實咱們真正須要的是上述結果中的第三行:
[objc] view plaincopy
pod 'OpenUDID', '~> 1.0.0'
不難看出,這是咱們須要添加到Podfile文件中的。
有了這條命令,就能夠方便、迅速地找到須要的Pods依賴庫。
命令格式爲:
[ruby] view plaincopy
$ pod setup
執行完了之後會打印:
[ruby] view plaincopy
Setting up CocoaPods master repo
Updating 7cd4668..f3d3ced
Fast-forward
接下來還會打印不少更新信息。
這條命令用於跟新本地電腦上的保存的Pods依賴庫tree。因爲天天有不少人會建立或者更新Pods依賴庫,這條命令執行的時候會至關慢,還請耐心等待。咱們須要常常執行這條命令,不然有新的Pods依賴庫的時候執行pod search命令是搜不出來的。
CocoaPods都託管在github上(官方連接爲:https://github.com/CocoaPods),全部的Pods依賴庫也都依賴github,所以第一步咱們須要建立一個屬於本身的github倉庫。倉庫建立界面以下圖:
上圖中標了序號的共6處,對應的說明以下:
一、Repository name
倉庫名稱,這裏寫成WZMarqueeView,必填的;
二、Description
倉庫的描述信息,可選的;
三、倉庫的公開性
這裏只能選Public,一個是由於Private是要money的,再一個Private別人看不到還共享個毛;
四、是否建立一個默認的README文件
一個完整地倉庫,都須要README說明文檔,建議選上。固然不嫌麻煩的話你也能夠後面再手動建立一個;
五、是否添加.gitignore文件
.gitignore文件裏面記錄了若干中文件類型,凡是該文件包含的文件類型,git都不會將其歸入到版本管理中。是否選擇看我的須要;
六、license類型
正規的倉庫都應該有一個license文件,Pods依賴庫對這個文件的要求更嚴,是必需要有的。所以最好在這裏讓github建立一個,也能夠本身後續再建立。我使用的license類型是MIT。
上面的各項都填寫完畢後,點擊Create repository按鈕便可,建立成功地界面如圖
到這,倉庫建立過程就結束了。
爲了便於向倉庫中刪減內容,須要先將倉庫clone到本地,操做方式有多種,推薦使用命令行:
[objc] view plaincopy
$ git clone https://github.com/wangzz/WZMarqueeView.git
操做完成後,github上對應的文件都會拷貝到本地,目錄結構爲:
github上倉庫中的.gitignore文件是以.開頭的隱藏文件,所以這裏只能看到兩個。
後續咱們的全部文件增、刪、改都在這個目錄下進行。
注意:如下描述的文件都要放在步驟二clone到本地的git倉庫的根目錄下面。
該文件爲Pods依賴庫的描述文件,每一個Pods依賴庫必須有且僅有那麼一個描述文件。文件名稱要和咱們想建立的依賴庫名稱保持一致,個人WZMarqueeView依賴庫對應的文件名爲WZMarqueeView.podspec。
1.1 podspec文件內容
WZMarqueeView.podspec的保存內容爲
[ruby] view plaincopy
Pod::Spec.new do |s|
s.name = "WZMarqueeView"
s.version = "1.0.0"
s.summary = "A marquee view used on iOS."
s.description = <<-DESC
It is a marquee view used on iOS, which implement by Objective-C.
DESC
s.homepage = "https://github.com/wangzz/WZMarqueeView"
# s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2"
s.license = 'MIT'
s.author = { "王中周" => "wzzvictory_tjsd@163.com" }
s.source = { :git => "https://github.com/wangzz/WZMarqueeView.git", :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/NAME'
s.platform = :ios, '4.3'
# s.ios.deployment_target = '5.0'
# s.osx.deployment_target = '10.7'
s.requires_arc = true
s.source_files = 'WZMarqueeView/*'
# s.resources = 'Assets'
# s.ios.exclude_files = 'Classes/osx'
# s.osx.exclude_files = 'Classes/ios'
# s.public_header_files = 'Classes/**/*.h'
s.frameworks = 'Foundation', 'CoreGraphics', 'UIKit'
end
該文件是ruby文件,裏面的條目都很容易知道含義。
其中須要說明的又幾個參數:
①s.license
Pods依賴庫使用的license類型,你們填上本身對應的選擇便可。
②s.source_files
表示源文件的路徑,注意這個路徑是相對podspec文件而言的。
③s.frameworks
須要用到的frameworks,不須要加.frameworks後綴。
1.2 如何建立podspec文件
你們建立本身的podspec文件能夠有兩個途徑:
①copy個人podspec文件而後修改對應的參數,推薦使用這種方式。
②執行如下建立命令:
[ruby] view plaincopy
$ pod spec create WZMarqueeView
也會建立名爲WZMarqueeView.podspec的文件。可是打開建立完的文件你就會發現裏面的東西太多了,不少都是咱們不須要的。
CocoaPods強制要求全部的Pods依賴庫都必須有license文件,不然驗證不會經過。license的類型有不少種,詳情能夠參考網站tl;dr Legal。在建立github倉庫的時候,我已經選擇了MIT類型的license。
建立Pods依賴庫就是爲了方便別人使用咱們的成果,好比我想共享給你們的WZMarqueeView類,是我想提供給廣大用戶使用的,這個類天然是必不可少的。我把這個類包含的兩個文件放到一個名稱爲WZMarqueeView的文件夾中,對應的目錄結構如圖:
裏面包含兩個文件:WZMarqueeView.h和WZMarqueeView.m
爲了快速地教會別人使用咱們的Pods依賴庫,一般須要提供一個demo工程。我建立的demo工程放到了一個名爲WZMarqueeViewDemo的文件夾中,該目錄包含的文件以下圖所示:
使用github的人應該都熟悉這個文件,它是一個成功github倉庫必不可少的一部分,使用的是markdown標記語言,用於對倉庫的詳細說明。
以上所說的5個是建立Pods依賴庫所需最基礎的文件,其中一、二、3是必需的,四、5是可選但強烈推薦建立的。
添加完這些文件之後,個人github本地倉庫目錄就變成了下圖所示的樣子:
通過步驟三,向本地的git倉庫中添加了很多文件,如今須要將它們提交到github倉庫中去。提交過程分如下幾步:
執行如下命令:
[ruby] view plaincopy
$ set the new version to 1.0.0
$ set the new tag to 1.0.0
這兩條命令是爲pod添加版本號並打上tag。而後執行pod驗證命令:
[ruby] view plaincopy
$ pod lib lint
若是一切正常,這條命令執行完後會出現下面的輸出:
[ruby] view plaincopy
-> WZMarqueeView (1.0.0)
ZMarqueeView passed validation.
到此,pod驗證就結束了。
須要說明的是,在執行pod驗證命令的時候,打印出了任何warning或者error信息,驗證都會失敗!若是驗證出現異常,打印的信息會很詳細,你們能夠根據對應提示作出修改。
依次執行如下命令:
[ruby] view plaincopy
$ git add -A && git commit -m "Release 1.0.0."
$ git tag '1.0.0'
$ git push --tags
$ git push origin master
上述命令均屬git的範疇,這裏很少述。若是一切正常,github上就應該能看到本身剛添加的內容了。以下圖所示:
通過前邊的四步操做,你可能覺得已經結束了,不幸的是還早着呢。
要想一個Pods依賴庫真正可用,還須要作最後一步操做,將咱們剛纔生成的podspec文件上傳到CocoaPods官方的Specs倉庫中,連接爲:https://github.com/CocoaPods/Specs
打開這個連接你就會發現,原來咱們能使用的,以及咱們使用pod search命令能搜索到的全部Pods依賴庫都會把它們的podspec文件上傳到這個倉庫中,也就是說,只有將咱們的podspec文件上傳到這個倉庫中之後,才能成爲一個真正的Pods依賴庫,別人才能正常使用!
按照git的規則,要想向別人的倉庫中添加文件,必須先fork一份別人的倉庫,作完相應地修改後,在push給倉庫的原做者,等到做者審覈經過,而後合併到原來的倉庫中。
流程明白了之後,天然知道該怎麼幹了:
進入到剛纔的官方倉庫連接中,點擊屏幕右上角的fork按鈕,以下圖:
而後你們會發現本身名下會多一份倉庫的分支。好比個人分支爲:
執行如下命令:
[ruby] view plaincopy
$ git clone https://github.com/wangzz/Specs.git
注意,你們須要將對應的倉庫地址換成本身的。
這個倉庫有點大,須要有耐心啊。
Specs倉庫clone到本地後,會放到一個名爲Specs的文件夾中。podspec文件在Specs倉庫中的保存原則是:
Pods依賴庫同名文件夾--->版本號同名文件夾--->podspec文件
照此原則,我須要在Specs文件夾下創建一個名爲WZMarqueeView的文件夾,而後進入到WZMarqueeView文件夾下,創建一個名稱爲1.0.0的文件夾,最後進入到1.0.0這個文件夾下,而且將以前建立好的WZMarqueeView.podspec文件拷貝進來。
不難理解,若是之後有對WZMarqueeView類的升級,就在WZMarqueeView文件夾下創建對應版本名稱的文件夾,用於保存對應版本的podspec文件便可。
這些操做完成後,目錄層次結構以下所示:
執行如下命令:
[ruby] view plaincopy
$ git add -A && git commit -m "Add WZMarqueeView podspec file"
$ git push origin master
成功之後就能在github上本身fork的Specs倉庫中看到剛上傳的文件了。
進入到本身fork的Specs倉庫中,會看到屏幕左上角有一個綠色按鈕
該按鈕點進去之後會有以下圖所示的界面:
點擊圖中的綠色Create Pull Request按鈕,便可將咱們fork的Specs上作的修改pull給CocoaPods官方的Specs倉庫。
到這一步後,剩下的工做就只有等了,等待CocoaPods的維護人員審覈並將咱們pull上去的修改合併到官方的Specs倉庫中,這個過程一般會有一天左右的等待時間。若是有任何消息,好比審覈不經過,或者審覈經過了,CocoaPods官方都會發郵件通知的。
等到審覈經過的時候,咱們就能在官方的Specs倉庫中看到本身上傳的文件夾了。
固然咱們也能查看審覈進度,打開這個連接:https://github.com/CocoaPods/Specs/pulls,這裏能看到全部的Specs倉庫pull請求,以下圖:
紅圈標識的就是我剛纔pull上來的請求,點進去之後就能看到對應的審覈進度。
若是收到了CocoaPods官方發過來的審覈經過郵件之後,你可能很着急的想在本身的電腦上執行pod search命令,看看能不能搜索到本身建立的Pods依賴庫。不過你確定會失望的,由於還須要執行一條命令才能在咱們的本地電腦上使用search命令搜索到咱們的依賴庫:
[ruby] view plaincopy
$ pod setup
在個人CocoaPods系列教程中的第一篇:CocoaPods詳解之----進階篇中的最後部分介紹過這條命令,它會將全部的Pods依賴庫tree跟新到本地。執行完這條命令,再去執行:
[ruby] view plaincopy
$ pod search WZMarqueeView
就能顯示出對應的介紹信息了!