精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

怎樣在swift中創建一個CocoaPods

移動開發
你可能對一些比較著名的開源的CocoaPods框架比較熟悉,比如Alamofire、MBProgressHUD。但是有時你可能找不到剛好滿足你需求的pod,也或者你需要把一個大的項目拆分成小的,可重用的組件。幸運的是,創建你自己的CocoaPods是件很容易的事!

你可能對一些比較著名的開源的CocoaPods框架比較熟悉,比如AlamofireMBProgressHUD。但是有時你可能找不到剛好滿足你需求的pod,也或者你需要把一個大的項目拆分成小的,可重用的組件。

幸運的是,創建你自己的CocoaPods是件很容易的事!

如果你已經為你的組件創建了一個Cocoa Touch框架,你已經完成了大多數的比較難的工作。如果你沒有也不要害怕,因為它還是很簡單的。

如果你只是曾經創建過iOS app的類的話,那也是可以的。你可以簡單地通過拖拽類或者方法來創建新的pod,這對你專屬的使用會很有意義。

這篇教程是開端,How to Use CocoaPods with Swift(中文 英文)是結束。如果你之前從沒用過cocoaPods,那么這篇文章絕對是你學習的前提。

因此,來一杯熱可可開始學習吧!

開始

你的首要客戶是冰淇淋公司。他們的冰淇淋太受歡迎了以至于不能在柜臺接收用戶訂單了。他們雇傭你來做一個漂亮的iOS應用,那樣就能讓用戶在他們的iPhone上下訂單了。你開始開發app了,并且進展得還不錯。

在這里下載開始程序-------這是教程 How to Use CocoaPods with Swift(中文 英文)里的最終版本。

app已經有幾個pod依賴文件在下載中,所以你不需要運行pod install來安裝它們。

注意:如果你已經學習了 How to Use CocoaPods with Swift(中文 英文),那么接下來的部分看起來可能比較熟悉----只是對那篇教程的復習。所以可以根據自己的情況跳過一部分。打開 IceCreamShop.xcworkspace,然后是Main.storyboard,找到Views\Storyboards & Nibs這個分組,看看app是怎樣布局的。

下面是對選擇口味場景的一個大致了解,這是這個應用的核心:

  • PickFlavorViewController: 處理用戶交互,比如用戶選擇了一個冰淇淋口味。
  • PickFlavorDataSource: 是展示冰淇淋口味的collectionview的數據源。
  • IceCreamView:是一個自定義的view,可以用來展示一種冰淇淋,并且它以Falvor這個模型來支撐。
  • ScoopCell:是一個自定義的collectionviewcell,它包含了一個ScoopView,這個view也是以Flavor這個model類來支撐的。

storyboard_annotated-427x500.png

冰淇淋店的高層管理者很喜歡現在的app,但是他們又添加了一些新的需求:冰淇淋零售商需要在他們的app中有選擇個人口味的功能。等等,那沒有在最初的設計中。但是對于像你這樣厲害的開發者這沒有問題!

[[144277]]

你能猜到怎么做嗎?是的,你需要在他自己的cocoapod中拉入這個方法。

配置你自己的pod

創建一個Xcode工程并且選擇iOS\Framework & Library\Cocoa TouchFramework,然后點擊下一步

cocoapod1.png

輸入RWPickFlavor作為產品名字并且選擇Swift作為開發語言。選擇下一步。

這篇教程需要你將你的工程創建在~/Documents/Libraries目錄下.在你的主目錄下選擇Documents文件夾。如果你沒有Libraries文件夾,在底部點擊New Folder按鈕并且創建它。

最后,選擇Libraries文件夾并且點擊創建。

你保存你的pod的目錄是很重要的因為在本地開發期間你需要在podFile中參考你的目錄。

通常,當你使用CocoaPods,你會像下面那樣將依賴性文件加入你的Podfile中

  1. pod 'PodName''~> 1.0' 

但是當你在開發自己的CocoaPod,你卻需要指明一個本地的路徑,就像這樣:

  1. pod 'MyPodName', :path => '~/Path/To/Folder/Containing/My/Pod' 

這種方法有兩個好處:

  1. 它會使用在你電腦上的對應的pod的本地文件,而不用從遠端目錄下抓取。
  2. 通常,你不會修改加入到你的app中的pod,因為這些修改會在下次你運行pod install的時候被覆蓋掉,因為pod會從遠端目錄下重新獲取并且你修改的資源文件也會被覆蓋。通過使用:path => syntax,你可以輕松地修改開發中的pod而不會被這個過程覆蓋,因為那個路徑就是現在CocoaPod的來源,因此當你再次運行pod install的時候這些修改不會丟失。

然而你可以為你在開發的pods使用不同的路徑,一般我建議將他們放在~/Documents/Libraries下。如果你有一個團隊在開發的話這也是一個很好的位置,因為cocoapods知道把“~”擴展為用戶的目錄。因此你不需要在podFile中寫很復雜的代碼來表示絕對路徑。

你也可以在你創建的cocoapod中引用其他的cocoapod作為依賴性文件-你只需要一個podFile來管理你的cocoaPods依賴性文件。

關閉Xcode,然后在終端中輸入下面的命令行:

  1. cd ~/Documents/Libraries/RWPickFlavor 
  2. pod init 
  3. open -a Xcode Podfile 

這就創建了一個新的podFile并且在Xcode中打開它。

用下面的內容替換新的podFile中的內容:

 
  1. platform :ios, '8.0' 
  2. use_frameworks! 
  3. target 'RWPickFlavor' do 
  4.  pod 'Alamofire''~> 1.2' 
  5.  pod 'MBProgressHUD''~> 0.9.0' 
  6. end 

這就聲明了RWPickerFlavor有外部依賴性文件Alamofire和MBProgressHUD。

保存并且關閉podFile,然后在終端中輸入下面的命令行:

  1. pod install 

正如你希望的那樣,這就會創建一個workspace并且安裝各種必需的文件

注意:如果pod install命令給出了任何警告,那么你有可能用的是一個老版本的Cocoapods。基于swift語言的cocoapods,例如Alamofire,要求cocoapods版本在0.36.0及以上。你可以嘗試在終端中輸入以下命令來查看你的cocoapods版本:

  1. pod --version 

如果是那個問題的話,在終端中輸入如下命令來安裝cocoapods的最新版本:

  1. sudo gem install CocoaPods 

輸入以下命令行打開新創建的RWPickFlavor workspace:

  1. open RWPickflavor.xcworkspace 

你的項目導航欄現在看起來應該是這樣的:

cocoapod2.png

現在你需要將 IceCreamShop workspace中的幾個文件拷貝到RWPickFlavor中。

#p#

首先,在 RWPickFlavor.xcworkspace 中創建下面的分組來歸類你將要拷貝的文件:

  • Categories
  • Controllers
  • Factories
  • Models
  • Views(Ice Cream,Storyboards & Nibs)

從IceCreamShop.xcworkspace中的分組到對應的RWPickFlavor.xcworkspace 中的分組,對所有的文件執行拖拽并放開的操作 - 除了AppDelegate.swift 和LaunchScreen.xib,就像下面那樣:

cocoapod3.gif

如果有提示跳出,要保證Copy items if needed這個選項被確認過了,這樣所有的文件才是真正被拷貝而不是簡單地鏈接。當你完成以后,RWPickFlavor 應該有下面的文件:

25.png

一旦你確定了所有的文件都已經被拷貝過來了,從IceCreamShop中刪除所有的originals和任何空的分組,只剩下RWPickFlavor中的文件。小心不要刪除下面這些:

  • AppDelegate.swift
  • LaunchScreen.xib
  • Images.xcassets
  • Supporting Files 分組下的任何文件

現在打開Info.plist,在Supporting Files那個分組下,找到Main storyboard file base name那一行并刪除。

編譯運行,應該不會有錯的,最終你會看到黑色的屏幕上顯示著 “Ice Cream Shop”的logo。

那么圖片呢?

你可能已經注意到了你沒有拷貝Resources分組,這是因為你只需要拷貝background.jpg這個圖片本身到RWPickFlavor的Resources文件夾下,不是整個的Images.xcassets文件。

首先,你在RWPickFlavor中創建一個Resources分組。

然后,在IceCreamShop中選擇 Images.xcassets,選中background右擊并選擇Show in Finder,就像下面那樣:

cocoapod4.png

現在把background.png從finder中拖拽到RMPickFlavor的resources分組中。當有彈出提示時,再次選中Copy items if needed選項。當你已經拷貝了圖片,從IceCreamShop的Image.xcassets中刪除原始的background圖片。

最后,在Main.storyboard的Choose Your Flavor場景中的RMPickFlavor類里更新imageview的圖片,這樣他就指向了圖片background.jpg而不是background。

cocoapod5.png

不管你信不信,創建你的pod的最困難的部分已經完成了。

[[144278]]

CocoaPods和Git

由于cocoapod是部署在git上面的, 每一個pod都需要有它自己的git目錄.如果你已經有了git主機,你可以用它來放你的目錄。

如果沒有,Github是一個很不錯的選擇,因為它被眾多的開發者所了解并且對開源的項目免費。

Bitbucket是另外一個不錯的選擇,它是免費的并且沒有限制的,包括私有的目錄,可以供達5個開發人員共同開發。

這個教程使用了github,但是你也可以用你自己的git服務器。

GitHub目錄設置

首先,注冊登陸你的github賬號。

下一步,點擊屏幕右上角的+(創建新的)圖標并且選擇下方的New repository.

github_new_repository-480x152.png

輸入RMPickFlavor作為目錄名,并且選擇Create repository。

Github將在你的賬戶下面創建一個新的目錄,然后你將看到一個下面屏幕所示的Quick setup所展示的你的目錄URL:

github_quick_setup-480x56.png

你將在某一時刻需要這個URL,所以保持這個頁面打開。

現在你需要第二個目錄來放你的私有pod規范 - 之后你將在這篇教程中用到它。

在一個新的標簽頁中打開github.com;再次點擊Create New圖標并選擇New repository。將這個目錄取名為RWPodSpecs,并選擇Create repository。

保持這個標簽頁打開之后在你需要這個URL的時候你可以輕松獲取。

#p#

Podspec設置

現在你需要為RMPickFlavor創建一個RWPickFlavor.podspec文件。這個Podspec文件包含了一些基本的信息,比如pod的名字、版本和git下載URL.

在終端中輸入下面的命令行,在每一行輸入enter鍵。

  1. cd ~/Documents/Libraries/RWPickFlavor 
  2. pod spec create RWPickFlavor 
  3. open -a Xcode RWPickFlavor.podspec 

這就創建了RWPickFlavor.podspec,在Xcode中打開。

在默認的podspec文件中有很多不錯的文檔和例子 - 然而,你不需要所有的這些。

用下面的內容代替RWPickFlavor.podspec中的所有內容

 
  1. 1 
  2.  s.platform = :ios 
  3.  s.ios.deployment_target = '8.0' 
  4.  s.name = "RWPickFlavor" 
  5.  s.summary = "RWPickFlavor lets a user select an ice cream flavor." 
  6.  s.requires_arc = true 
  7.  # 2 
  8.  s.version = "0.1.0" 
  9.  # 3 
  10.  s.license = { :type => "MIT", :file => "LICENSE" } 
  11.  # 4 - Replace with your name and e-mail address 
  12.  s.author = { "[Your Name Goes Here]" => "[Your_Email@Your_Email_Domain.com]" } 
  13.  # For example, 
  14.  # s.author = { "Joshua Greene" => "jrg.developer@gmail.com" } 
  15.  # 5 - Replace this URL with your own Github page's URL (from the address bar) 
  16.  s.homepage = "[Your RWPickFlavor Homepage URL Goes Here]" 
  17.  # For example, 
  18.  # s.homepage = "https://github.com/JRG-Developer/RWPickFlavor" 
  19.  # 6 - Replace this URL with your own Git URL from "Quick Setup" 
  20.  s.source = { :git => "[Your RWPickFlavor Git URL Goes Here]", :tag => "#{s.version}"
  21.  # For example, 
  22.  # s.source = { :git => "https://github.com/JRG-Developer/RWPickFlavor.git", :tag => "#{s.version}"
  23.  # 7 
  24.  s.framework = "UIKit" 
  25.  s.dependency 'Alamofire''~> 1.1' 
  26.  s.dependency 'MBProgressHUD''~> 0.9.0' 
  27.  # 8 
  28.  s.source_files = "RWPickFlavor/**/*.{swift}" 
  29.  # 9 
  30.  s.resources = "RWPickFlavor/**/*.{png,jpeg,jpg,storyboard,xib}" 
  31. end 

正如podFile一樣,podspec也是用Ruby寫的。千萬小字不要出現打字錯誤,否則pod可能會出現確認或者安裝失敗的情況。

下面是正在進行的:

1.首先你要寫清楚pod的基本信息。基于Swift的cocppods的部署目標必須在iOS8.0及以上。如果你給了一個更低的版本,pod就不能正確安裝了。

2.podSpec實際上就是你的cocoapod的一個及時的截屏,并且用版本號來標記。當你更新一個pod,你也需要更新podspec的版本。所有的cocoapods都最好使用語義化版本號。如果你對Semantic Versioning不熟悉,請看How to Use CocoaPods with Swift

3.所有的pods都必須制定一個許可證。如果你沒有的話,當你視圖安裝的時候cocoapods會給你一個警告,并且你也不能把它上傳到cocoapods trunk---specs目錄下。

4.然后請寫明你自己的信息,這是pod的作者。在占位文字的地方輸入你的名字和e-mail地址。

5.現在你需要在你pod的主頁上寫明URL。你可以就從你的github主頁的瀏覽器的地址欄里面拷貝并粘貼地址。

6.將這個URL替換為上面你創建的第一個目錄中的“Quick Setup”部分的git下載URL。通常,最好是使用http:或者https:開頭的URL,這樣使用的人就更容易明白。你也可以使用SSHurl。但是你需要確認你的team中的所有人-無論是誰需要cocoapod的路徑-已經有了配置你的git主機的公開/私密的鍵值對。

7.你要指明框架和任何pod依賴性文件。

8.你需要指明基于文件擴展的(public source files)公用資源文件。在這兒,你需要用.swift作為擴展。

9.最后,指明基于文件擴展的resources。

就像許多其他的pod,你需要創建LICENSE 文件。

復制這兒的MIT license在你最喜歡的編輯器中,然后保存為LICENSE到~/Documents/Libraries/RWPickFlavor目錄下,沒有擴展名。確保將[year]和[fullname]替換為真實值-啊,當然是你的真實的年份和名字了。

Choose a License是一個很棒的幫你的項目找到合適的開源license的一個站點,并且由hithub中的一些志愿者進行創建和維護。

上傳至Git

最后你準備將RMPickerFlavor上傳至git中的新家了。

在終端中輸入下面的命令行,將[Your RWPickFlavor Git URL]替換為你之前創建的RWPickFlavor目錄:

  1. cd ~/Documents/Libraries/RWPickFlavor 
  2. git init 
  3. git add . 
  4. git commit -m "Initial commit" 
  5. git tag 0.1.0 
  6. git remote add origin [Your RWPickFlavor Git URL] 
  7. git push -u origin master --tags 

如果有彈出,輸入你的github的用戶名和密碼。

這就將RWPickFlavor文件夾中的所有文件都提交了,并創建了一個0.1.0的tag,并且把所有的東西上傳到遠程目錄中。

恭喜你,你已經創建了你的第一個cocoapod!

[[144279]]

你已經創建了你的第一個cocoapod,但是你能使用它嗎?是的,還不一定:

首先你需要將你的podspec添加到一個私人的specs目錄下;這樣當你安裝的時候cocoapods就能找到pod了。幸運的,你已經為此創建了一個git目錄,所以這最后的一步是相對簡單明了的。

輸入下面的命令,要確保你還在 RWPickFlavor 目錄下:

  1. pod repo add RWPodSpecs [Your RWPodSpecs Git URL] 
  2. pod repo push RWPodSpecs RWPickFlavor.podspec 

要確保你已經用之前創建的RWPodSpecs 目錄對應的git url替換了[Your RWPodSpecs Git URL] 

這就在你本地電腦上創建了RWPodSpecs的一個本地參考并且保存在你的電腦的~/.cocoapods目錄下,將RWPickFlavor.podspec上傳到那里。

需要你有了一個私人的pod規范目錄。比你想的要容易,對吧?

使用你的新CocoaPod

這是使用你的新創建的pod的最后時刻了。

打開IceCreamShop的podfile并且用下面的命令替換它的內容

platform :ios, '8.0'

 
  1. source 'https://github.com/CocoaPods/Specs.git' 
  2. source '[Your RWPodSpecs Git URL Goes Here]' 
  3. use_frameworks! 
  4. target 'IceCreamShop' do 
  5.  pod 'RWPickFlavor', :path => '~/Documents/Libraries/RWPickFlavor' 
  6. end 

確保你已經用你的RWPodSpecs目錄對應的gitURL替換了[Your RWPodSpecs Git URL Goes Here]

然后,在終端中運行pod install。

最后,用下面的命令替換AppDelegate.swift中的所有內容

  1. import UIKit 
  2. import RWPickFlavor 
  3. @UIApplicationMain 
  4. class AppDelegate: UIResponder, UIApplicationDelegate { 
  5.  var window: UIWindow? 
  6.  var rootViewController: UIViewController! 
  7.  func application(application: UIApplication, didFinishLaunchingWithOptions  
  8.    launchOptions: [NSObject : AnyObject]?) -> Bool { 
  9.    setupRootViewController() 
  10.    window = UIWindow(frame: UIScreen.mainScreen().bounds) 
  11.    window?.rootViewController = rootViewController 
  12.    window?.makeKeyAndVisible() 
  13.    return true 
  14.  } 
  15.  func setupRootViewController() { 
  16.    let bundle = NSBundle(forClass: PickFlavorViewController.self) 
  17.    let storyboard = UIStoryboard(name: "Main", bundle: bundle) 
  18.    rootViewController = storyboard.instantiateInitialViewController() as! UIViewController 
  19.  } 

在setupRootViewController()中,你獲取了對RWPickFlavor包內容的參考 ---它其實是一個動態的框架--這個方法創建了Main.storyboard,并且初始化了根視圖

編譯運行。看到熟悉的“Choose Your Flavour”你肯定會很開心。太棒了!

choose_flavor-180x320.png

抽象所有的東西!

你如果像我這樣,你可能會想,“哇,app Delegate 肯定對RWPickFlavor的結構影響很多”。

幸運的是,你可以做一些事來降低耦合度:使用BetterBaseClasses,這是一個可以使其他pods使用更方便的pod。

在RWPickFlavor的pod文件中添加下面的代碼,就在Alamofire的后面:

  1. pod 'BetterBaseClasses''~> 1.0' 

同樣地,將下面的命令添加到RWPickFlavor.podspec,在Alamofire那一行的下面:

  1. s.dependency 'BetterBaseClasses''~> 1.0' 

現在用下面的內容替換s.version

  1. s.version = "0.2.0" 

現在你要將BetterBaseClasses聲明為一個依賴,然后and then bumping the version of your CocoaPod.

現在在終端中運行pod install來安裝新的依賴性文件。

接下來,將下面的內容導入到PickFlavorViewController中,還是在Alamofire的后面: 

  1. import BetterBaseClasses 

用下面的內容替換類的定義:

 

  1. public class PickFlavorViewController: BaseViewController, UICollectionViewDelegate {  

 

這就改變了PickFlavorViewController而使它繼承自BaseViewController,BaseViewController是BetterBaseClasses的一部分。

現在你需要將這些改變推送到你的RWPickFlavor和RWPodSpecs目錄下。在終端中運行下面的命令:

  1. cd ~/Documents/Libraries/RWPickFlavor 
  2. git add . 
  3. git commit -m "Added BetterBaseClasses dependency" 
  4. git tag 0.2.0 
  5. git push origin master --tags 
  6. pod repo push RWPodSpecs RWPickFlavor.podspec 

接下來,你需要將這些改變拉取到IceCreamShop中。

更新IceCreamShop的PodFile,用下面的代碼替換pod 'RWPickFlavor'.

  1. pod 'RWPickFlavor''~> 0.2.0' 

下面你將更新PodFile來獲取你剛剛上傳的RWPickerFlavor的新版本。然后在終端中執行pod install在IceCreamShop中跟新新的依賴。

最后,用下面的內容替換AppDelegate.swift中的全部內容:

  1. import UIKit 
  2. import RWPickFlavor 
  3. @UIApplicationMain 
  4. class AppDelegate: UIResponder, UIApplicationDelegate { 
  5.  var window: UIWindow? 
  6.  func application(application: UIApplication, didFinishLaunchingWithOptions  
  7.    launchOptions: [NSObject : AnyObject]?) -> Bool { 
  8.    window = UIWindow(frame: UIScreen.mainScreen().bounds) 
  9.    window?.rootViewController = UINavigationController(rootViewController:  
  10.      PickFlavorViewController.instanceFromStoryboard()) 
  11.    window?.makeKeyAndVisible() 
  12.    return true 
  13.  } 

那就簡單得多了!

BetterBaseClasses在UIViewController,UITableViewController以及其他UIKit類中添加分類。其中包含了一個叫UIViewController+BetterBaseClasses的分類,這個分類添加了一些很方便的方法比如 instanceFromStoryboard()使初始化ViewControllers非常簡單,不管它們是在main bundle或者是別的什么地方,就像這個例子中的框架一樣。

編譯運行,這一次,你會看到熟悉的‘ Choose Your Flavor’。

接下來?

你可以在 這兒 下載到完整的IceCreamShop項目,以及RWPickFlavor pod

現在你可以開始創建你自己的CocoaPods了!不過,你在這篇教程中學到的只是在涉及到cocoapod時的一小部分建議。請下載CocoaPods 指南來學習關于創建cocoapods的所有的內容

在你創建了cocoapod之后,你可能會考慮將它添加到CocoaPods Master Specs Repo中,這樣全世界的開發者就可以通過CocoaPods.org獲取d熬它了。你可以看看這篇博客來學習怎么做CocoaPods Trunk

責任編輯:倪明 來源: raywenderlich
相關推薦

2016-03-08 09:52:22

xcode插件開發

2017-08-17 14:38:39

JavaAbstract抽象

2023-03-15 09:00:43

SwiftUISlider

2020-09-29 07:24:14

Python字典數據

2011-03-10 10:45:47

Azure“Hello Worl

2014-07-02 09:47:06

SwiftCocoaPods

2009-09-22 11:54:42

ibmdwPHP

2021-09-15 11:43:08

Linuxdd命令USB驅動器

2017-05-27 14:45:04

Linux命令進程

2021-12-14 09:00:42

Swift HTTP 代理服務器

2024-05-06 00:00:00

Android系統通信

2011-09-08 10:46:12

Widget

2017-02-10 20:00:17

Linux共享目錄命令

2009-07-29 09:58:38

民工通過CCNACCNA

2022-11-11 14:55:14

Linuxcron

2021-01-04 09:12:31

集合變量

2019-12-31 08:00:00

DebianLinuxApple Swift

2021-04-14 15:25:39

Linux加密文件保險庫

2022-02-10 22:34:51

對象JVM收集器

2018-01-04 16:04:35

圓環放大動畫
點贊
收藏

51CTO技術棧公眾號

谁有免费的黄色网址| 久久精品无码中文字幕| 黄色污污网站在线观看| 国产成人黄色| 欧美影院午夜播放| 国模一区二区三区私拍视频| 日韩美女视频网站| 亚洲人成网站77777在线观看| 欧美日韩午夜剧场| 欧洲av一区| 国产一区二区在线视频观看| 中文视频一区| 日韩电视剧免费观看网站| 免费在线观看的毛片| 天天在线视频色| 国产精品亚洲午夜一区二区三区 | 久久久久久国产精品美女| 在线免费观看污视频| 日韩影片中文字幕| 亚洲欧美激情插 | 黑人巨大国产9丨视频| 免费国产精品视频| 日本欧美久久久久免费播放网| 日韩一中文字幕| 800av在线播放| 欧美韩国日本| 欧美日韩激情网| 中文字幕一区二区三区有限公司| 日批视频在线播放| 狠狠色伊人亚洲综合成人| 午夜伦理精品一区| 久久久久亚洲av片无码| 欧美一级色片| 欧美一区午夜精品| 99视频精品免费| 伊人电影在线观看| 国产日韩欧美精品综合| 91久久大香伊蕉在人线| 中文字幕在线天堂| 国内精品美女在线观看| 深夜成人在线观看| 国产精品一二三区在线观看| theporn国产在线精品| 欧美天堂亚洲电影院在线播放| 日本男女交配视频| 羞羞的视频在线观看| 亚洲同性同志一二三专区| 日韩福利二区| 国产精品无码2021在线观看| 91在线观看地址| 国产视频在线观看一区| 国产小视频一区| 福利电影一区二区三区| 高清不卡日本v二区在线| 国产激情视频在线播放| 国产一区欧美日韩| 亚洲一区二区免费在线| 精品久久人妻av中文字幕| 激情久久五月天| 91最新国产视频| 999精品国产| 国产成人免费视频精品含羞草妖精| 91免费在线视频网站| 国产日韩精品suv| 国产成人精品午夜视频免费| 成人午夜电影免费在线观看| 丰满少妇在线观看bd| av一区二区三区黑人| 狠狠久久综合婷婷不卡| 欧美日韩伦理片| 欧美国产精品一区二区三区| 色一情一乱一伦一区二区三区| 激情小说 在线视频| 国产精品视频观看| 精品久久免费观看| 里番在线播放| 欧美日韩中文字幕在线| 97公开免费视频| yiren22亚洲综合| 成人av地址| 亚洲欧洲国产专区| 国产青草视频在线观看| 人在线成免费视频| 欧美亚洲一区三区| 永久av免费在线观看| 澳门久久精品| 亚洲男人的天堂在线播放| 成人性生交大片免费看无遮挡aⅴ| 色喇叭免费久久综合网| 九色91av视频| 中文字幕在线看人| 国产综合成人久久大片91| 国产一级特黄a大片99| av在线天堂播放| 亚洲综合一区二区精品导航| 日韩a在线播放| 99视频有精品高清视频| 亚洲国产精品久久久久秋霞不卡 | 国产乱人伦精品一区| 亚洲视频网站在线观看| 欧美激情图片小说| 国产精品普通话对白| 成人有码视频在线播放| 日韩一级免费视频| 国产精品传媒入口麻豆| 亚洲熟妇无码一区二区三区导航| 91天天综合| 精品国产91亚洲一区二区三区婷婷 | 亚洲国产精品悠悠久久琪琪| 国产大屁股喷水视频在线观看| 在线欧美不卡| 成人免费大片黄在线播放| 亚州精品国产精品乱码不99按摩| 国产精品久久久99| 久久精品国产精品亚洲色婷婷| 四虎国产精品成人免费影视| 国产视频欧美视频| 欧美成人精品欧美一级私黄| 久久综合九色| 精品国产综合| 日本无删减在线| 欧美日本乱大交xxxxx| 国产伦精品一区二区三区妓女| 在线看片不卡| 国产欧美一区二区三区在线看| 三级国产在线观看| 亚洲一区二区高清| 日本特黄在线观看| 午夜精品毛片| 国产一区玩具在线观看| 黄色软件在线| 色域天天综合网| 亚洲欧美在线不卡| 亚洲黄色三级| 亚洲伊人一本大道中文字幕| 日本韩国在线视频爽| 在线一区二区三区四区| 黄瓜视频污在线观看| 日韩视频三区| 国内一区二区在线视频观看| 久久99亚洲网美利坚合众国| 欧美一区二区久久| 538任你躁在线精品视频网站| 精品一区二区影视| 吴梦梦av在线| 二区三区精品| 久久久91精品| av天堂一区二区三区| 亚洲视频免费在线| 一级黄色在线播放| 婷婷亚洲五月| 69174成人网| av黄色在线| 欧美α欧美αv大片| 久久久久久久福利| 粉嫩蜜臀av国产精品网站| 欧美性受黑人性爽| 涩涩屋成人免费视频软件 | 性欧美ⅴideo另类hd| 欧美日本乱大交xxxxx| 日本一级特级毛片视频| 国产美女久久久久| 欧美成人精品免费| 欧美日韩破处| 国产v综合ⅴ日韩v欧美大片| 国产污视频在线| 欧美日韩国产三级| 手机在线免费看片| 成人av在线一区二区| 波多野结衣之无限发射| 中国av一区| 国产精品直播网红| 中文字幕免费高清电视剧网站在线观看 | 国产理论在线播放| 国产成人aa在线观看网站站| 91国产精品91| 九一国产在线| 欧美日韩1234| 国产一级久久久| 久久久www成人免费毛片麻豆| 最近中文字幕一区二区| 中文字幕一区二区三区乱码图片 | 国产男女猛烈无遮挡| 亚洲成国产人片在线观看| 美女又爽又黄视频毛茸茸| 久久精品国产免费看久久精品| 久久精品在线免费视频| 日韩有码av| 国产欧美日韩综合精品| h视频在线免费观看| 日韩av在线免费观看一区| 中文字幕在线观看免费| 亚洲综合精品久久| 国产精品成人无码免费| 国产电影一区二区三区| 欧美丰满熟妇xxxxx| 亚洲欧美综合久久久| 久久久亚洲综合网站| 久草综合在线| 久久免费视频这里只有精品| 成人不用播放器| 欧美精品一区二区在线播放| 中文字幕在线观看你懂的| 亚洲一区二区精品久久av| 欧美精品日韩在线| a亚洲天堂av| 91性高潮久久久久久久| 久久看片网站| 日本阿v视频在线观看| 日韩精品一区二区久久| 看欧美日韩国产| 伊人精品综合| 91香蕉国产在线观看| 韩国美女久久| 欧美精品激情blacked18| 在线免费黄色| 国产亚洲视频在线观看| 天堂在线观看视频| 日韩久久免费av| 国产一区二区三区成人| 91久久奴性调教| 久久夜靖品2区| 一区二区三区欧美亚洲| 日本视频在线免费| 久久精品人人爽人人爽| 亚洲黄色在线网站| 国产成人av一区二区三区在线观看| 国产原创精品在线| 日本视频一区二区三区| 日本www在线播放| 亚洲小说欧美另类婷婷| 裸体大乳女做爰69| 久久精品久久久| 亚洲欧美日韩精品久久久 | 亚洲免费精品视频| 国产剧情在线观看一区| 欧美亚洲免费在线| 清纯唯美亚洲经典中文字幕| 粉嫩精品一区二区三区在线观看 | 六月丁香综合| 欧美亚洲一二三区| 99精品久久| 色综合久久久久无码专区| 9国产精品视频| 国产中文字幕免费观看| 亚洲永久字幕| 国产亚洲综合视频| 亚洲影音先锋| 粉嫩虎白女毛片人体| 午夜亚洲视频| 老头吃奶性行交视频| 日韩精品一二三区| 亚洲成人av免费看| 爽好久久久欧美精品| 少妇性l交大片| 蜜桃传媒麻豆第一区在线观看| 黑森林精品导航| 久久69国产一区二区蜜臀| 亚洲高清视频免费| 国产伦精品一区二区三区免费迷 | 亚洲一区二区免费在线观看| 999视频在线免费观看| 99re6热只有精品免费观看| 国产精品久久国产三级国电话系列 | 高清日韩av电影| 日韩中文字幕亚洲| 污视频网站免费在线观看| 国外成人免费在线播放| 一个人看的www视频在线免费观看 一个人www视频在线免费观看 | 欧美日韩四区| 欧美日本视频在线观看| 日韩精品午夜视频| 亚洲另类xxxx| 国产精品成人免费一区二区视频| 亚洲电影一级黄| 亚洲图片在线视频| 欧日韩精品视频| 国产美女自慰在线观看| 欧美videos中文字幕| 天堂中文资源在线| 日韩在线小视频| 国产精品69xx| 国产精品你懂得| 欧美日韩黄网站| 欧美日韩高清免费| 91精品婷婷色在线观看| 久激情内射婷内射蜜桃| 日本不卡视频在线观看| 日本少妇xxxx软件| 久久久国产精品麻豆| 九九九免费视频| 一本大道久久a久久精品综合| 国产精品嫩草影院精东| 亚洲国产精品免费| 麻豆电影在线播放| 欧美中文字幕视频| 精品国产亚洲一区二区三区| 久久av一区二区三区漫画| 99久久亚洲精品| 日本免费黄视频| 精品一区二区三区久久| 三级黄色片网站| 亚洲精品你懂的| 东京热一区二区三区四区| 日韩三级在线免费观看| 国产精品一区二区婷婷| 高清欧美一区二区三区| 六九午夜精品视频| 久久久久网址| 亚洲网址在线| 中文av字幕在线观看| 久久日韩粉嫩一区二区三区| 毛片aaaaa| 欧美高清视频www夜色资源网| 三级在线电影| 久久久久女教师免费一区| 欧美黑粗硬大| 欧美理论一区二区| 99国产精品久久久久久久| 亚洲男人天堂2021| 国产精品人人做人人爽人人添| 性无码专区无码| 精品国产乱码久久久久久浪潮| 欧美jizzhd欧美| 国产精品久久国产精品99gif| 国产精品久久久久av蜜臀| 九九久久九九久久| 美女视频黄a大片欧美| 精品人妻一区二区三区蜜桃视频| 亚洲成人免费在线| 国产1区在线观看| 欧美大片在线看免费观看| 国产va免费精品观看精品| 亚洲欧洲一二三| 日本最新不卡在线| 日韩乱码人妻无码中文字幕久久| 午夜视频久久久久久| 亚洲欧美强伦一区二区| 久久99久久99精品中文字幕 | 超碰在线观看免费| 91精品视频在线免费观看| 久久国产精品亚洲人一区二区三区 | 欧美色大人视频| 成人动漫在线播放| 国产精品专区h在线观看| 青青草国产免费一区二区下载 | 国产在线视频一区二区| 手机在线中文字幕| 欧美精品粉嫩高潮一区二区| 日韩在线免费电影| 成人做爽爽免费视频| 亚洲91视频| 欧美人与性动交α欧美精品| 夜夜精品浪潮av一区二区三区| 午夜美女福利视频| 久久久久久亚洲精品中文字幕 | 久久99精品国产麻豆婷婷| 九九热久久免费视频| 制服.丝袜.亚洲.中文.综合| 国产美女福利在线| yellow视频在线观看一区二区| 欧美日韩国产欧| 亚洲中文字幕一区| 日韩欧美亚洲范冰冰与中字| 国产高清免费av在线| 国产精品日韩在线一区| 国产高清一区二区| 国产91在线免费观看| 亚洲成人免费av| 日本中文字幕电影在线观看| 国产精品igao视频| 天天精品视频| 95视频在线观看| 色综合色综合色综合| 日本视频不卡| 国产一区二区三区四区hd| 国产精品日韩久久久| 99久久99久久精品免费看小说.| 欧美男同性恋视频网站| 国产区美女在线| 日韩国产精品一区二区三区| 国产精品自在在线| 国产免费观看av| 啊v视频在线一区二区三区 | 欧美成人精品3d动漫h| 国产伦子伦对白在线播放观看| 日韩电影大全在线观看| 国内精品第一页| 中文在线第一页| 大胆人体色综合| 伊人久久综合影院| 91性高潮久久久久久久| 日韩欧美亚洲国产一区| 91精品国产91久久久久久青草| 久久精品国产第一区二区三区最新章节 | 国产黄在线看| 51国产成人精品午夜福中文下载| 国产精品毛片| www.色小姐com| 一区国产精品视频|