日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用 Swift Package 插件生成代码

發布時間:2023/12/31 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用 Swift Package 插件生成代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

不久前,我正在工作中開發一項新服務,該服務由 Swift Package 組成,該 Package 公開了一個類似于Decodable協議,供我們應用程序的其余部分使用。事實上,該協議是從Decodable本身繼承下來的,看起來像這樣:

Fetchable.swit

protocol Fetchable: Decodable, Equatable {}

新的 package 將采用符合Fetchable的類型來嘗試從遠程或緩存的JSON數據塊中解碼它們。

由于這項服務對應用程序的正確運行至關重要,作為這項工作的一部分,我們希望確保始終存在故障安全( fail-safe)。因此,我們讓該應用程序附帶了一個備用的JSON文件,如果遠程和緩存的數據解碼失敗,將使用該文件,來保證程序的正常運行。

無論如何,我們需要符合Fetchable的新類型從備用數據中正確解碼。然而,有一個問題,有時很難發現備用JSON文件或模型本身是否有任何錯誤,因為解碼錯誤會在運行時發生,并且只有在訪問某些屏幕/功能時才會發生。

為了讓我們對我們要發送的代碼更有信心,我們添加了一些單元測試,試圖根據我們附帶的備用JSON解碼符合Fetchable協議的每個模型。這些將使我們在CI上有一個早期指示,表明備用數據或模型中存在錯誤,如果所有測試都通過,我們將確定,一旦我們發布新服務,它始終具有故障安全功能。

我們手動編寫了這些測試,但我們很快就意識到這個解決方案是不可擴展的,因為隨著越來越多的符合Fetchable協議的類型被添加,我們引入了大量的代碼復制,并可能有人最終忘記為特定功能編寫這些測試。

我們考慮過自動化該過程,但由于我們的代碼庫的性質,我們遇到了一些問題,代碼庫高度模塊化,混合了Xcode項目和Swift Package。一些架構決策還意味著我們必須收集大量符號信息,才能獲得生成測試的正確類型。

是什么讓我再次關注到它?

在我忘記了這件事一段時間后,Xcode 14的公告允許在Xcode項目中使用 Swift Package 插件,以及一些架構更改使提取類型信息變得容易得多,這讓我有動力再次開始研究這個問題。

請注意,Xcode項目的構建工具插件尚未按照發布說明在Xcode 14 Beta 2中提供,但將在Xcode 14的未來版本中提供。

在過去的幾周里,我一直在研究如何使用軟件包插件生成單元測試,在這篇文章中,我將解釋我在向哪個方向嘗試以及它涉及了什么。

實施細節

我開始了一項任務,即創建一個構建工具插件,與 Xcode 14 引入的命令插件不同,該插件可以任意運行并依賴用戶輸入,作為Swift軟件包構建過程的一部分運行。

我知道我需要創建一個可執行文件,因為 Build Tool 插件依賴這些來執行操作。這個腳本將完全用 Swift 編寫,因為這是我最熟悉的語言,并承擔以下職責:

  • 掃描目標目錄并提取所有.swift文件。目標將被遞歸掃描,以確保不會錯過子目錄。
  • 使用sourcekit,或者更具體地說,SourceKitten,掃描這些.swift文件并收集類型信息。這將允許提取符合Fetchable協議的所有類型,以便可以針對它們編寫測試。
  • 獲得這些類型后,生成一個帶有XCTestCase的.swift文件,其中包含每種類型的單元測試。
  • 讓我們寫一些代碼吧

    與所有 Swift Package 一樣,最簡單的入門方法是在命令行上運行swift package init。

    這創建了兩個目標,一個是包含Fetchable協議定義和符合該定義的類型的實現代碼,另一個是應用插件為此類類型生成單元測試的測試目標。

    Package.swit

    // swift-tools-version: 5.6 // The swift-tools-version declares the minimum version of Swift required to build this package.import PackageDescriptionlet package = Package(name: "CodeGenSample",platforms: [.macOS(.v10_11)],products: [.library(name: "CodeGenSample",targets: ["CodeGenSample"]),],dependencies: [],targets: [.target(name: "CodeGenSample",dependencies: []),.testTarget(name: "CodeGenSampleTests",dependencies: ["CodeGenSample"])] )

    編寫可執行文件

    如前所述,所有構建工具插件都需要可執行文件來執行所有必要的操作。

    為了幫助開發此命令行,將使用幾個依賴項。第一個是SourceKitten——特別是其SourceKitten框架庫,這是一個Swift包裝器,用于幫助使用Swift代碼編寫sourcekit請求,第二個是快速參數解析器,這是蘋果提供的軟件包,可以輕松創建命令行工具,并以更快、更安全的方式解析在執行過程中傳遞的命令行參數。

    在創建executableTarget并賦予它兩個依賴項后,Package.swift就是這個樣子:

    Package.swift

    // swift-tools-version: 5.6 // The swift-tools-version declares the minimum version of Swift required to build this package.import PackageDescriptionlet package = Package(name: "CodeGenSample",platforms: [.macOS(.v10_11)],products: [.library(name: "CodeGenSample",targets: ["CodeGenSample"]),],dependencies: [.package(url: "https://github.com/jpsim/SourceKitten.git", exact: "0.32.0"),.package(url: "https://github.com/apple/swift-argument-parser", from: "1.0.0")],targets: [.target(name: "CodeGenSample",dependencies: []),.testTarget(name: "CodeGenSampleTests",dependencies: ["CodeGenSample"]),.executableTarget(name: "PluginExecutable",dependencies: [.product(name: "SourceKittenFramework", package: "SourceKitten"),.product(name: "ArgumentParser", package: "swift-argument-parser")])] )

    可執行目標需要一個入口點,因此,在PluginExecutable目標的源目錄下,必須創建一個名為PluginExecutable.swift的文件,其中所有可執行邏輯都需要創建。

    請注意,這個文件可以隨心所欲地命名,我傾向于以與我在Package.swift中創建的目標相同的方式命名它。

    如下所示的腳本導入必要的依賴項,并創建可執行文件的入口點(必須用@main裝飾),并聲明在執行時傳遞的4個輸入。

    所有邏輯和方法調用都存在于run函數中,該函數是調用可執行文件時運行的方法。這是ArgumentParser語法的一部分,如果您想了解更多信息,Andy Iba?ez有一篇關于該主題的精彩文章,可能非常有幫助。

    PluginExecutable.swift

    import SourceKittenFramework import ArgumentParser import Foundation@main struct PluginExecutable: ParsableCommand {@Argument(help: "The protocol name to match")var protocolName: String@Argument(help: "The module's name")var moduleName: String@Option(help: "Directory containing the swift files")var input: String@Option(help: "The path where the generated files will be created")var output: Stringfunc run() throws {// 1let files = try deepSearch(URL(fileURLWithPath: input, isDirectory: true))// 2setenv("IN_PROCESS_SOURCEKIT", "YES", 1)let structures = try files.map { try Structure(file: File(path: $0.path)!) }// 3var matchedTypes = [String]()structures.forEach { walkTree(dictionary: $0.dictionary, acc: &matchedTypes) }// 4try createOutputFile(withContent: matchedTypes)}// ... }

    現在讓我們專注于上面的run方法,以了解當插件運行可執行文件時會發生什么:

  • 首先,掃描目標目錄以找到其中的所有.swift文件。這是遞歸完成的,這樣子目錄就不會錯過。此目錄的路徑作為參數傳遞給可執行文件。
  • 對于上次調用中找到的每個文件,通過SourceKitten發出Structure請求,以查找文件中Swift代碼的類型信息。請注意,環境變量(IN_PROCESS_SOURCEKIT)也被設置為true。這需要確保選擇源套件的進程中版本,以便它能夠遵守插件的沙盒規則。
  • Xcode附帶兩個版本的sourcekit可執行文件,一個版本解析進程中的文件,另一個使用XPC向解析進程外文件的守護進程發送請求。后者是mac上的默認版本,為了能夠將sourcekit用作插件進程的一部分,必須選擇進程中版本。這最近在SourceKitten上作為環境變量實現,是運行引擎蓋下使用sourcekit的其他可執行文件的關鍵,例如SwiftLint。

  • 瀏覽上次調用的所有響應,并掃描類型信息以提取符合Fetchable協議的任何類型。

  • 在傳遞給可執行文件的output參數指定的位置創建一個輸出文件,其中包含每種類型的單元測試。

  • 請注意,上面沒有重點介紹每個調用的具體細節,但如果你對實現感興趣,包含所有代碼的repo現在已經在Github上公開了!

    創建該插件

    與可執行文件一樣,必須向Package.swift添加.plugin目標,并且必須創建包含插件實現的.swift文件(Plugins/SourceKitPlugin/SourceKitPlugin.swift)。

    Package.swift

    // swift-tools-version: 5.6 // The swift-tools-version declares the minimum version of Swift required to build this package.import PackageDescriptionlet package = Package(name: "CodeGenSample",platforms: [.macOS(.v10_11)],products: [.library(name: "CodeGenSample",targets: ["CodeGenSample"]),],dependencies: [.package(url: "https://github.com/jpsim/SourceKitten.git", exact: "0.32.0"),.package(url: "https://github.com/apple/swift-argument-parser", from: "1.0.0")],targets: [.target(name: "CodeGenSample",dependencies: []),.testTarget(name: "CodeGenSampleTests",dependencies: [CodeGenSample"], plugins: [SourceKitPlugin],),.executableTarget(name: "PluginExecutable",dependencies: [.product(name: "SourceKittenFramework", package: "SourceKitten"),.product(name: "ArgumentParser", package: "swift-argument-parser")]),.plugin(name: "SourceKitPlugin",capability: .buildTool(),dependencies: [.target(name: "PluginExecutable")])] )

    以下代碼顯示了插件的初始實現,其struct符合BuildToolPlugin的協議。這需要實現一個返回具有單個構建命令的數組的createBuildCommands方法。

    此插件使用buildCommand而不是preBuildCommand,因為它需要作為構建過程的一部分運行,而不是在它之前運行,因此它有機會構建和使用它所依賴的可執行文件。在這種情況下,支持使用buildCommand的另一點是,它只會在輸入文件更改時運行,而不是每次構建目標時運行。

    此命令必須為要運行的可執行文件提供名稱和路徑,這可以在插件的上下文中找到:

    SourceKitPlugin.swift

    import PackagePlugin@main struct SourceKitPlugin: BuildToolPlugin {func createBuildCommands(context: PluginContext, target: Target) async throws -> [Command] {return [.buildCommand(displayName: "Protocol Extraction!",executable: try context.tool(named: "PluginExecutable").path,arguments: ["FindThis",🤷,"--input",🤷,"--output",🤷],environment: ["IN_PROCESS_SOURCEKIT": "YES"],outputFiles: [🤷])]} }

    如上面的代碼所示,還有一些空白需要填充(🤷):

  • 提供outputPath,用于生成單元測試文件。此文件可以在pluginWorkDirectory中生成,也可以在插件的上下文中找到。該目錄提供讀寫權限且其中創建的任何文件都將是軟件包構建過程的一部分。

  • 提供輸入路徑和模塊名稱。這是最棘手的部分,這些需要指向正在測試的目標的來源,而不是插件正在應用于的目標——單元測試。謝天謝地,插件的目標依賴項是可訪問的,我們可以從該數組中獲取我們感興趣的依賴項。此依賴項將是內部的(target而不是product),它將為可執行文件提供其名稱和目錄。

  • SourceKitPlugin.swift

    import PackagePlugin@main struct SourceKitPlugin: BuildToolPlugin {func createBuildCommands(context: PluginContext, target: Target) async throws -> [Command] {let outputPath = context.pluginWorkDirectory.appending(GeneratedTests.swift”)guard let dependencyTarget = target.dependencies.compactMap { dependency -> Target? inswitch dependency {case .target(let target): return targetdefault: return nil}}.filter { "\($0.name)Tests" == target.name }.first else {Diagnostics.error("Could not get a dependency to scan!)return []}return [.buildCommand(displayName: "Protocol Extraction!",executable: try context.tool(named: "PluginExecutable").path,arguments: ["Fetchable",dependencyTarget.name,"--input",dependencyTarget.directory,"--output",outputPath],environment: ["IN_PROCESS_SOURCEKIT": "YES"],outputFiles: [outputPath])]} }

    注意上述可選性處理方式。如果在測試目標的依賴項中找不到合適的目標,則使用Diagnostics API將錯誤轉發回Xcode,并告訴它完成構建過程。

    讓我們看下結果

    插件這就完成了!現在讓我們在 Xcode 中運行它!為了測試這種方法,將包含以下內容的文件添加到CodeGenSample目標中:

    CodeGenSample.swift

    import Foundationprotocol Fetchable: Decodable, Equatable {}struct FeatureABlock: Fetchable {let featureA: FeatureAstruct FeatureA: Fetchable {let url: URL} }enum Root {struct RootBlock: Fetchable {let url: URLlet areAllFeaturesEnabled: Bool} }

    請注意,腳本將在結構中首次出現Fetchable協議時停止。這意味著任何嵌套的符合Fetchable協議的類型都將被測試,只是外部模型。

    給定此輸入并在主目標上運行測試,生成并運行XCTestCase,其中包含符合Fetchable協議的兩種類型的測試。

    GeneratedTests.swift

    import XCTest @testable import CodeGenSampleclass GeneratedTests: XCTestCase {func testFeatureABlock() {assertCanParseFromDefaults(FeatureABlock.self)}func testRoot_RootBlock() {assertCanParseFromDefaults(Root.RootBlock.self)}private func assertCanParseFromDefaults<T: Fetchable>(_ type: T.Type) {// Logic goes here...} }

    所有測試都通過了😅?而且,盡管他們目前沒有做很多事情,但可以擴展實現,以提供一些示例數據和一個JSONDecoder實例來對每個單元測試進行解析。

    關于我們

    我們是由 Swift 愛好者共同維護,我們會分享以 Swift 實戰、SwiftUI、Swift 基礎為核心的技術內容,也整理收集優秀的學習資料。

    總結

    以上是生活随笔為你收集整理的使用 Swift Package 插件生成代码的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产午夜亚洲精品 | aaawww| 精品久久国产 | 激情婷婷综合网 | 久久久久9999亚洲精品 | av一区二区三区在线播放 | 97av精品 | 欧美性大胆 | 日韩欧美一区视频 | 国产va饥渴难耐女保洁员在线观看 | 色婷婷精品 | 色综合久久久久久久久五月 | 欧美国产日韩在线观看 | 久久爱www. | 日韩久久精品一区二区三区 | 国内成人精品视频 | 亚洲专区 国产精品 | av黄在线播放 | 亚洲热久久 | 色婷婷亚洲 | 一区二区三区视频网站 | 999视频在线播放 | 九九三级毛片 | 亚洲国产成人久久综合 | 国内精品视频久久 | 久久经典国产视频 | 91精品久久久久 | 日韩成人免费在线 | 成人aaa毛片 | 色婷婷精品大在线视频 | 亚洲电影av在线 | 国产精品久久久久久久久久久久冷 | 精品一区在线看 | 91亚洲精品在线 | 在线观av| 91女神的呻吟细腰翘臀美女 | 最近中文字幕免费观看 | 天天操天天怕 | 亚洲国产成人精品在线观看 | 国产在线观看xxx | 美女久久 | 黄色网在线免费观看 | 欧美韩国在线 | 久久久久在线观看 | 婷婷激情五月 | 国产精品国产三级国产aⅴ9色 | 日本精a在线观看 | 国产黄网站在线观看 | 最新国产在线 | 色资源二区在线视频 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 在线不卡中文字幕播放 | 丁香五月网久久综合 | 狂野欧美激情性xxxx欧美 | 99精品一级欧美片免费播放 | 在线观看日韩免费视频 | 激情综合亚洲精品 | 最近中文字幕大全 | 久久a v视频 | 日韩视频一二三区 | av观看网站 | 国产亚洲人成网站在线观看 | 成人性生爱a∨ | 五月天堂网 | 国产精品日韩欧美一区二区 | 午夜久久久久久久 | 天天色天天综合 | 成人免费在线观看电影 | 激情在线免费视频 | 国产精品a久久久久 | 欧美日韩中文在线视频 | 免费在线电影网址大全 | 天天拍天天操 | 国产91av视频在线观看 | 狠狠躁夜夜a产精品视频 | 最近中文字幕在线 | 欧美 日韩精品 | 国产 日韩 在线 亚洲 字幕 中文 | 国产一级黄色免费看 | 九九视频免费在线观看 | 玖玖在线视频观看 | 999久久久 | 综合中文字幕 | 亚洲毛片视频 | 日韩精品中文字幕久久臀 | 在线国产视频 | 91.麻豆视频 | 久久久www成人免费精品张筱雨 | 天天爽夜夜爽人人爽曰av | 91视频黄色 | 国产精品麻豆视频 | 一级黄色毛片 | 超碰99在线| 人人干在线 | 最新日本中文字幕 | 日日摸日日碰 | 国产高清在线免费观看 | 最近最新中文字幕视频 | 精品视频久久久久久 | 在线亚洲精品 | 国产成人久久av免费高清密臂 | 国产精品电影在线 | 国产小视频在线观看 | 国产小视频国产精品 | 免费看国产视频 | 免费av在线网站 | 国产丝袜一区二区三区 | 久青草视频 | 成人黄色小说在线观看 | 久艹视频免费观看 | 久久午夜影视 | 久久新视频 | 国产美女搞久久 | 99久久精品免费看国产四区 | 美女久久久久久久久久久 | 黄色aaa毛片| 日韩va在线观看 | 国产一级视屏 | 天天操天天添天天吹 | 国产精品中文久久久久久久 | 欧美综合久久 | 欧美aa级 | 五月婷婷开心中文字幕 | www.天天草 | 国产高清免费av | 天天干天天拍天天操 | 国产精品国产毛片 | 国产精品手机视频 | 久久艹艹 | 亚洲精品欧美精品 | 国产精品 久久 | 亚洲专区欧美 | 亚洲一区二区三区四区精品 | 日韩久久久 | 亚洲国产av精品毛片鲁大师 | 在线看国产视频 | av天天在线观看 | 日韩在线资源 | 六月婷婷网 | 很污的网站 | 国产免费精彩视频 | 国产黄色视 | 99九九热只有国产精品 | 黄色电影在线免费观看 | 97精品欧美91久久久久久 | 亚洲久草在线视频 | 国产精品系列在线播放 | 亚洲人成网站精品片在线观看 | 欧美aaa视频 | 精品毛片在线 | 亚洲天堂在线观看完整版 | 国产欧美高清 | 色综合久久88色综合天天人守婷 | 亚洲国产精品人久久电影 | 色网站免费在线观看 | 欧美专区国产专区 | 日韩一区二区久久 | 中文字幕av日韩 | 国产一区二区视频在线播放 | 天堂在线免费视频 | 亚洲一区 影院 | 深夜福利视频一区二区 | 亚洲高清视频在线 | 91精品国产99久久久久久红楼 | 毛片基地黄久久久久久天堂 | www.五月天婷婷.com | 久久精品毛片基地 | 日韩电影黄色 | 91精品视频免费在线观看 | 国产美腿白丝袜足在线av | 成人av高清在线观看 | 日韩在线一级 | 精品久久久久久综合日本 | 精品视频不卡 | 激情综合色综合久久综合 | 欧美91精品国产自产 | 日韩精品 在线视频 | 亚洲综合在线五月天 | 手机av观看 | 麻豆视频免费入口 | 免费视频一区二区 | 国产91精品一区二区 | 日本女人在线观看 | 毛片二区 | 久久久国产精品成人免费 | 视频成人永久免费视频 | 久久综合九色99 | 欧美精品中文字幕亚洲专区 | 美女在线观看网站 | 久久精精品视频 | 久久看毛片 | 中文字幕一区二区三区在线播放 | 午夜国产福利在线观看 | 欧美一级视频免费看 | 国产精品色视频 | 日韩欧美综合 | 一区二区三区动漫 | 亚洲国产中文字幕 | 久久久五月婷婷 | 国产精品综合久久久久 | 色多多在线观看 | 欧美a影视 | 91精选在线观看 | 中文字幕亚洲精品在线观看 | 一区二区三区国产精品 | 97超碰色 | 免费日韩一区 | 五月天婷婷免费视频 | 国产精品爽爽久久久久久蜜臀 | 欧美一级淫片videoshd | 午夜10000 | 久久久夜色 | 91日韩在线专区 | 国产不卡一区二区视频 | 天天操操操操操操 | 在线观看免费中文字幕 | 超碰在线资源 | 在线观看日韩精品视频 | 97视频在线免费观看 | 久久久久伦理电影 | 欧美在线视频一区二区 | 91久久国产综合精品女同国语 | 日韩精品一区二区三区免费视频观看 | 婷婷网站天天婷婷网站 | 精品在线观看免费 | 国产精品美女999 | 亚洲精品www| 午夜av影院 | 一级淫片在线观看 | 日韩视频在线观看视频 | 黄色片网站大全 | 亚洲精品网址在线观看 | 天天干天天做天天爱 | 国产精品观看在线亚洲人成网 | 免费在线观看av网站 | 久久高清免费视频 | 免费看的国产视频网站 | 国产偷国产偷亚洲清高 | 午夜精品一区二区三区免费视频 | 欧美不卡视频在线 | 色婷婷av国产精品 | 久草视频一区 | 性色av一区二区三区在线观看 | 免费日韩一区二区三区 | 国产午夜免费视频 | 天天射一射| 最新中文字幕在线观看视频 | 免费看国产黄色 | 日日夜夜精品免费观看 | 国产精品久久久久久久久久免费 | 欧美一二三区在线观看 | 亚洲综合爱 | 天天激情站 | 在线三级播放 | 人人添人人澡 | 国产一区二区免费看 | 91av视频免费观看 | 国内亚洲精品 | 色综合久久久久久久久五月 | 综合色播| 啪啪免费观看网站 | 日韩成人邪恶影片 | 国产超碰97 | 欧美 日韩 视频 | 国产无限资源在线观看 | 99精品免费 | 色婷婷电影 | 午夜视频欧美 | 亚洲涩涩网站 | 99久久精品免费看国产一区二区三区 | 狠狠躁夜夜躁人人爽视频 | 国产经典 欧美精品 | 久久久久久久久久久成人 | 久久亚洲婷婷 | 在线免费日韩 | 伊人天堂久久 | 欧美作爱视频 | www.av在线.com | 国产日产精品一区二区三区四区 | 欧美日韩在线播放一区 | 99精品视频99 | 中文字幕中文字幕 | 亚洲经典精品 | 亚洲精品456在线播放乱码 | 久久国产一区二区三区 | 国产成人免费在线 | 日韩三区在线观看 | 国产日产精品一区二区三区四区的观看方式 | 国产一级淫片在线观看 | 99精品成人| 国产在线精品一区 | 懂色av懂色av粉嫩av分享吧 | 亚洲一区二区三区毛片 | 91大神精品视频在线观看 | 中文字幕精品www乱入免费视频 | 欧美一级视频一区 | 天天操天天操 | 成人免费观看大片 | 亚洲精品视| 日韩精品不卡在线 | 91字幕| 久草视频首页 | 久久精品免视看 | 国产精品一区二区三区久久久 | 久久久久久久久久久国产精品 | 国产精品乱码一区二三区 | 国产破处在线播放 | 又黄又刺激的视频 | 天天性天天草 | 国产成人资源 | 97视频在线观看网址 | 成人免费网站视频 | www.久久爱.cn | 成人在线播放网站 | 香蕉视频在线免费 | 日韩女同一区二区三区在线观看 | 精品中文字幕在线观看 | 亚洲精品美女久久17c | 欧美激情视频在线观看免费 | 探花视频在线观看+在线播放 | 久久综合久久综合这里只有精品 | 久久久91精品国产一区二区三区 | 91视频电影 | 成人影视免费 | 在线视频99 | 在线观看亚洲电影 | 香蕉久草在线 | 九九视频精品在线 | 久久国产精品色av免费看 | 在线免费观看不卡av | 精品国模一区二区 | 91视频免费看 | 天天干天天插 | 亚洲国内精品在线 | 在线观看黄网 | 美女又爽又黄 | 日韩精品免费一区二区三区 | 国产99久久久国产精品免费二区 | 日韩精品一区二区三区免费观看视频 | 最新av电影网址 | 久产久精国产品 | 亚洲视频99 | 丰满少妇麻豆av | 国产精品麻豆视频 | 亚洲国产精品成人av | 国产精品久久久久免费 | 99视频国产在线 | 夜夜爽天天爽 | 国产午夜精品av一区二区 | 激情五月综合网 | 五月天电影免费在线观看一区 | 亚洲 成人 一区 | 亚洲一区二区视频在线播放 | 免费精品人在线二线三线 | 日本中文字幕网站 | 日韩精品一区二区三区中文字幕 | 国产精品网红直播 | 99精品一级欧美片免费播放 | 国产91精品一区二区绿帽 | 国产资源在线视频 | 亚洲精品小区久久久久久 | 国产在线精品国自产拍影院 | 一区二区视频欧美 | 又黄又色又爽 | 国产91在线免费视频 | www亚洲视频 | 天天干天天摸 | 西西444www | 91网站在线视频 | 成人午夜精品久久久久久久3d | 国产91精品高清一区二区三区 | 成人精品99 | 亚洲一区二区三区在线看 | 久久99热这里只有精品 | 国产香蕉视频 | 中文字幕高清视频 | 国产经典三级 | 在线日韩中文 | 亚洲日本成人 | 午夜av电影 | 亚洲一区欧美精品 | 久久99中文字幕 | 天天爽夜夜爽人人爽曰av | 一级黄色视屏 | 丁香花在线视频观看免费 | 国产精品一区二区精品视频免费看 | 国内免费久久久久久久久久久 | 六月激情久久 | 亚洲精品国产精品国自产在线 | 国产成人黄色网址 | 黄色大片日本 | sesese图片| 在线观看中文字幕2021 | 国产一区二区精品在线 | 国产精品理论视频 | 日韩三级一区 | 天天草视频 | 久久久久久久久久久免费视频 | 99免费国产 | 狠狠黄| 久久九九久久精品 | 久久影院一区 | 亚洲欧洲中文日韩久久av乱码 | 99久久久成人国产精品 | 免费黄色在线网站 | 国产福利不卡视频 | 国产精品视频线看 | 成年人电影毛片 | 96亚洲精品久久久蜜桃 | 中文字幕在线播放日韩 | 少妇性aaaaaaaaa视频 | 精品成人网 | 久久久精品亚洲 | 精品在线观看视频 | 24小时日本在线www免费的 | 丁香五婷 | 久久成人午夜视频 | 香蕉久久久久久久 | 午夜精品一区二区三区免费视频 | 国产日韩精品在线观看 | 日韩午夜视频在线观看 | 色婷婷六月天 | 久久草在线免费 | 狠狠的操狠狠的干 | 国产精品欧美日韩在线观看 | 九九欧美视频 | 一级黄色a视频 | 午夜精品视频一区 | 成人黄色资源 | 天天干天天干天天干天天干天天干天天干 | 日日夜夜免费精品 | 亚洲专区 国产精品 | 亚洲五月 | 亚洲精品国 | 欧美精品久久久久a | 黄网站色 | 91精选在线观看 | 日韩激情免费视频 | 黄色在线观看免费网站 | 免费色视频在线 | 天天精品视频 | 中文字幕色综合网 | av福利网址导航 | 国产伦理一区二区 | 美女免费视频观看网站 | 国产精品一级在线 | 最近日本字幕mv免费观看在线 | 国产在线视频一区二区三区 | 国产精品久久久久久久久久久久 | 国产专区一 | av一级在线观看 | 亚洲三级国产 | 欧美激情在线网站 | 91精品国产综合久久婷婷香蕉 | 午夜性盈盈 | 免费av 在线 | 91精品夜夜| 久久国产精品网站 | 亚洲精品动漫久久久久 | 成人羞羞视频在线观看免费 | 在线免费色 | 国产成人综合在线观看 | 97在线观视频免费观看 | 久久免费视屏 | 中文字幕日韩有码 | 久久久片| 黄色三级免费片 | 国产精品18久久久久vr手机版特色 | 国产亚州精品视频 | 国产亚洲va综合人人澡精品 | 日韩av片在线 | 色射爱 | 四虎欧美 | 欧美日韩在线网站 | 97超碰免费在线观看 | 欧美性色综合网站 | 美女精品久久久 | 亚洲免费av网站 | www,黄视频| 亚洲一区二区视频在线 | 精品专区一区二区 | 深夜成人av| 91爱爱网址| 国产成人在线精品 | 色综合天天视频在线观看 | 中文av网站 | 成人国产精品久久久 | 97久久久免费福利网址 | 国内精品视频一区二区三区八戒 | 日韩在线网址 | 国产日韩精品在线 | 色视频成人在线观看免 | 国产69精品久久app免费版 | 福利视频第一页 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 69国产盗摄一区二区三区五区 | 精品视频免费久久久看 | 97超碰资源站 | 天天伊人狠狠 | 一区在线电影 | 伊人伊成久久人综合网小说 | 成人app在线播放 | 一区二区视频免费在线观看 | 欧美精彩视频在线观看 | 久久久久欠精品国产毛片国产毛生 | 精品一区二区电影 | 美女网站视频久久 | 亚洲精品网址在线观看 | 国产精品免费看久久久8精臀av | 午夜成人免费电影 | 在线影院 国内精品 | 色多视频在线观看 | 福利视频 | 久久综合中文字幕 | 伊人国产在线观看 | 亚洲免费一级 | a天堂最新版中文在线地址 久久99久久精品国产 | 亚洲在线高清 | 精品无人国产偷自产在线 | 久久亚洲福利视频 | 日本性xxx| www.亚洲激情.com | 在线看欧美 | 日韩在线播放av | 久草视频在线免费 | 2021国产精品视频 | 在线免费观看国产 | 色婷婷婷 | 国产精品免费久久久久久 | 丁香视频全集免费观看 | 激情喷水 | 最近中文字幕高清字幕免费mv | www日日| 国产精品2019| 91香蕉亚洲精品 | 欧美一级特黄aaaaaa大片在线观看 | 久久久精品久久日韩一区综合 | 国产一级大片免费看 | 国产精品久久一区二区三区, | 中文在线最新版天堂 | 欧美激情视频一区二区三区免费 | 亚洲有 在线 | 麻豆传媒视频在线播放 | 啪一啪在线| 久久综合九色 | 亚洲精品视频在线免费播放 | 青春草免费在线视频 | 麻豆影视网站 | 国内一级片在线观看 | 亚洲国产精品免费 | 国产黄色片免费 | 天天色 天天 | 免费看一级特黄a大片 | 亚洲色五月 | 手机av片| 欧美日韩在线视频一区二区 | 在线看一区| 国产99久久久国产精品免费看 | 夜夜看av | 亚洲va欧美va | 日韩色视频在线观看 | 99热免费在线 | 国产一区免费在线 | 国产精品 美女 | 在线免费观看亚洲视频 | 久久精品成人 | 97电影网站 | 在线观看免费一区 | 色片网站在线观看 | 亚洲黄a| 国产理论在线 | 午夜私人影院 | 日韩在线观看你懂的 | 97人人精品| 亚洲视频1 | 欧美成人xxxx | 日韩精品久久一区二区三区 | 日韩av片无码一区二区不卡电影 | 日韩在线高清 | 色全色在线资源网 | 午夜精品视频一区二区三区在线看 | 中文字幕久久精品 | 九九精品在线观看 | 欧美日韩精品在线 | 91亚洲在线 | 日韩免费在线视频观看 | 亚洲黄色一级视频 | 亚洲日本韩国一区二区 | 天天干夜夜爱 | 国产成人在线网站 | 欧美va天堂va视频va在线 | 国产在线久草 | 婷婷在线综合 | 免费看成人片 | 欧美精品网站 | 91精品国产高清自在线观看 | www婷婷| 美女网站视频色 | 三级免费黄色 | 久久久久久久久久久久久国产精品 | 久草热视频 | 亚洲全部视频 | 国产精品一区久久久久 | 色99网 | 综合在线色 | 色射色| 国产一级免费片 | 日韩大片在线免费观看 | 亚洲视频1 | 欧美日韩亚洲第一页 | 91久久爱热色涩涩 | 黄色三级免费网址 | 欧美精品久久久久久久久老牛影院 | 99国产免费网址 | 涩涩网站在线看 | 婷婷亚洲综合五月天小说 | av免费电影在线观看 | 99久久久国产精品免费99 | 四虎影视精品成人 | 国产精品日韩精品 | 久久看片 | 久久久网页 | 日韩免费在线观看网站 | 五月激情六月丁香 | 日韩69av | 国产高清在线免费视频 | 日韩精品视频免费看 | 国产成人在线观看 | 91九色porny在线| 久久婷婷色综合 | 国内精品美女在线观看 | 久久在线影院 | 99精品国产成人一区二区 | 国产日本在线播放 | 久久这里有精品 | 久久国产精品精品国产色婷婷 | 中文字幕 婷婷 | 国产又粗又猛又爽又黄的视频免费 | 日韩欧美高清一区二区 | 色91在线视频 | 91成人免费视频 | 日韩国产精品久久久久久亚洲 | 乱男乱女www7788 | 91丨九色丨高潮丰满 | 激情六月婷婷久久 | 免费成人av | 在线成人免费av | 69国产精品视频免费观看 | 91视频网址入口 | 97av免费视频 | 日批在线观看 | 免费国产黄线在线观看视频 | 欧美一级高清片 | 天堂av在线7| 亚洲精品国 | 99精品国产在热久久下载 | 国产麻豆视频 | 欧美日韩一区二区视频在线观看 | 99热在线精品观看 | 中文字幕在线视频免费播放 | 91成人精品 | 人人澡澡人人 | 黄色软件视频网站 | 久久久久这里只有精品 | 欧美成人手机版 | a爱爱视频 | 在线看黄网站 | 182午夜在线观看 | www..com黄色片| 久草视频在线播放 | 久久久久成人精品 | 一区二区国产精品 | 349k.cc看片app| 91久久久国产精品 | 很黄很污的视频网站 | 亚洲国产av精品毛片鲁大师 | 国产精品18久久久久久不卡孕妇 | 免费av试看| 欧美日韩啪啪 | 奇米影视999 | 亚洲成a人片综合在线 | 在线国产观看 | 国产黄色大片免费看 | 成人av片在线观看 | 手机色在线| 国产精品一区二区在线免费观看 | 国产成人一区二区三区久久精品 | 三上悠亚一区二区在线观看 | 成人av电影在线观看 | 免费精品在线观看 | 中文字幕a∨在线乱码免费看 | 欧美日韩久 | 四虎www | 黄色在线观看免费网站 | 97视频免费在线 | 欧美性做爰猛烈叫床潮 | 日韩免费观看视频 | 欧美精选一区二区三区 | 国产精品久久久久久久毛片 | 亚洲精品一区二区在线观看 | 色综合天天射 | 国产精品99久久久 | 亚洲 成人 一区 | 国产中文字幕在线播放 | 日韩av男人的天堂 | 亚洲视屏 | 成年人黄色大片在线 | 成人免费观看大片 | 免费 在线 中文 日本 | 91在线看免费 | 91丨九色丨蝌蚪丨老版 | 超碰com| 黄a在线看| 日韩欧美在线视频一区二区 | 日韩精品久久一区二区三区 | 18岁免费看片 | 色久av| 中文乱码视频在线观看 | 00av视频| 久久呀 | 美女视频黄免费的 | 久久精品99久久久久久2456 | 成人免费在线观看av | 一区 二区电影免费在线观看 | 日韩大陆欧美高清视频区 | www.91国产 | 91av在线视频播放 | 久久精品国产亚洲精品 | 99久热在线精品 | 91在线免费公开视频 | 91视频3p| 国产精品网址在线观看 | 天天干天天操天天入 | 久草剧场| 在线导航福利 | 欧美日韩免费观看一区=区三区 | 免费观看成年人视频 | 欧美日韩国产xxx | 婷婷久久婷婷 | 手机av在线免费观看 | 欧美激情视频在线免费观看 | 国产精品国产三级国产专区53 | 97精品超碰一区二区三区 | 亚洲精品免费视频 | 91伊人久久大香线蕉蜜芽人口 | 香蕉影视在线观看 | 久久久精品国产一区二区电影四季 | 中文在线中文资源 | 96av麻豆蜜桃一区二区 | 国产免费a | 一级黄色大片在线观看 | www.人人草| 天天操天天综合网 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 96久久欧美麻豆网站 | 成人av电影免费在线观看 | av在线日韩 | 一级免费av | 久久激情五月丁香伊人 | 玖玖视频网 | 在线激情影院一区 | 91mv.cool在线观看 | 欧美日韩一区三区 | 91视频在线播放视频 | 91超在线| 亚洲人成人99网站 | 免费观看完整版无人区 | 91插插插网站 | 欧美日韩国产精品一区二区三区 | 久久激情精品 | 视频在线亚洲 | 免费看一及片 | 久久久国产在线视频 | 91自拍成人 | 97久久精品午夜一区二区 | 99久久999久久久精玫瑰 | 亚洲 成人 欧美 | 激情五月婷婷网 | 成人午夜电影在线播放 | 亚洲砖区区免费 | 日本精品午夜 | 91麻豆免费看 | 狠狠色丁香婷婷 | 国产日韩欧美在线观看视频 | 97超碰色偷偷 | 国产系列精品av | 久久久久伦理电影 | 亚洲激情在线 | 久久不射电影院 | 91色蜜桃 | 99精品色| 黄色三级在线看 | 怡红院久久 | 91丨精品丨蝌蚪丨白丝jk | 国产精品久久一区二区三区不卡 | 中文字幕乱码视频 | 国产亚洲成人精品 | 91人人爽人人爽人人精88v | 日韩毛片在线一区二区毛片 | 丁香激情五月 | 国产韩国日本高清视频 | 久久狠狠干 | 97国产精品免费 | 久久久精华网 | 不卡的av在线播放 | 亚洲精品久久久久久久不卡四虎 | 亚洲v欧美v国产v在线观看 | 欧美狠狠操| 在线观看亚洲精品 | 中文在线免费观看 | 91精品免费在线视频 | 91香蕉视频720p | 久久精品久久久精品美女 | 欧美日韩不卡在线视频 | 亚洲涩涩涩涩涩涩 | 日本不卡一区二区三区在线观看 | 国产激情小视频在线观看 | 免费又黄又爽的视频 | 国产色一区| 黄色亚洲免费 | 伊人五月天.com | 久久露脸国产精品 | 日韩成人邪恶影片 | 国产精品原创 | 成人视屏免费看 | 五月婷婷伊人网 | 国产五码一区 | 开心激情网五月天 | 国产又粗又硬又爽视频 | 午夜婷婷在线观看 | 成年人免费看片网站 | 久草综合在线观看 | 国外成人在线视频网站 | 91亚洲精品久久久中文字幕 | 久久国产精品99久久久久 | 在线精品在线 | 91丨九色丨蝌蚪丨老版 | 欧美日韩中文在线视频 | 国产第一福利 | 91在线观看视频 | 女人魂免费观看 | 亚洲精品国产欧美在线观看 | 久久看免费视频 | 综合久久综合久久 | 日韩av午夜| 狠狠狠狠狠操 | 一级c片| 日本黄色免费看 | 偷拍精偷拍精品欧洲亚洲网站 | 日韩大片在线播放 | 亚洲精品乱码久久久久久 | 久久综合婷婷综合 | 在线观看精品视频 | 国产一级精品在线观看 | 午夜a区 | 日韩中文字幕在线不卡 | 亚洲资源片 | www在线观看视频 | 麻豆果冻剧传媒在线播放 | 一本一道久久a久久综合蜜桃 | av日韩不卡| 欧美极品xxxx | 99视频偷窥在线精品国自产拍 | 中文字幕在线观看av | 91麻豆精品国产91久久久无限制版 | 久久免费视频播放 | 国产精品对白一区二区三区 | 亚洲成av人片在线观看无 | 99精品视频免费 | 99热这里是精品 | 97视频在线观看播放 | 国内免费久久久久久久久久久 | 国产精品网在线观看 | 久久久久高清毛片一级 | jizz999| 97视频免费 | 欧美日韩精品久久久 | 亚洲一区二区高潮无套美女 | 久久精品久久精品久久39 | 在线 国产 亚洲 欧美 | 国产精品第7页 | 91超在线| 日本aaa在线观看 | 色老板在线视频 | 天天操人人要 | 美女视频黄在线 | 成人在线视频网 | 中文在线www | 天天色视频 | 欧美日韩在线播放一区 | 国产丝袜美腿在线 | 操操操日日 | 国产亚洲精品久久网站 | 国产成免费视频 | 日韩精品首页 | 精品国产乱码久久久久久1区2匹 | 91精品色 | 99热在线观看免费 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 精品在线观看国产 | 丝袜+亚洲+另类+欧美+变态 | 国产一级免费视频 | 国产99久久久久 | 91成人午夜 | 日韩在线资源 | 欧美性春潮 | 亚洲mv大片欧洲mv大片免费 | 国产成人精品999在线观看 | 天天干天天射天天插 | 99r在线视频 | 久久手机在线视频 | 欧美一级片免费 | 免费黄在线观看 | 99精品在线看 | 国产精品免费麻豆入口 | 久久这里只有精品1 | 在线免费91 | 色综合天天狠天天透天天伊人 | 亚洲自拍偷拍色图 | 爱av在线网 | 国产高清黄色 | 麻豆成人在线观看 | 亚洲高清视频在线观看免费 | 国产91在线观 | 久久都是精品 | 国产字幕在线看 | 久久涩视频 | 中文字幕av免费观看 | 岛国大片免费视频 | 国产免费小视频 | 五月开心婷婷网 | 999日韩| 欧美性生活久久 | 人人爽人人乐 | 色噜噜在线观看 | 久久视频精品在线观看 | 9在线观看免费 | 亚洲综合视频网 | 国产123av | 色综合激情网 | 日韩有码欧美 | 91传媒在线 | 国产精品亚洲成人 | 亚洲欧美国产精品va在线观看 | 四虎最新入口 | 99亚洲精品在线 | 91精品国产自产老师啪 | 天天艹天天干天天 | 欧美精品一区二区在线播放 | 国产精品一区二区三区在线看 | 成人性生爱a∨ | 91久久一区二区 | 99电影456麻豆 | 成人app在线免费观看 | 色综合久久久久久久 | 99在线免费观看视频 | 91香蕉视频在线下载 | 国产无遮挡又黄又爽馒头漫画 | 欧美精品久久久久久久久老牛影院 | 91在线视频免费 | 日韩高清精品一区二区 | 91香蕉视频黄 | 天堂av影院| 一区二区三区在线视频111 | 中文字幕国语官网在线视频 | av超碰在线| 国产精品久久一卡二卡 | 国产丝袜在线 | 特级西西444www大胆高清无视频 | 国产区久久 | 黄色一级大片在线免费看产 | 欧美一区二区三区在线观看 | 日韩三级视频在线观看 | 国产裸体视频bbbbb | 婷婷国产一区二区三区 | 午夜色站 | www.久久成人 | 日韩在线观看视频一区二区三区 | 日韩一区二区三区观看 | 九九综合在线 | 热久久国产| 亚洲精品国精品久久99热 | 在线观看精品一区 | 久久xx视频 | 日韩在线资源 | 亚洲涩涩一区 | 天天草天天 | 中文在线中文a | 中文字幕乱码亚洲精品一区 | 欧美精品亚洲二区 | 久久久精品欧美 | 亚洲 欧洲av | 一区二区三区电影在线播 | 日韩黄色免费在线观看 | 精品美女久久久久 | 午夜精品久久一牛影视 | 一区二区三区四区精品视频 | 91精品国自产在线偷拍蜜桃 |