更新了登录
This commit is contained in:
Binary file not shown.
@@ -46,8 +46,8 @@
|
|||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "292"
|
startingLineNumber = "209"
|
||||||
endingLineNumber = "292"
|
endingLineNumber = "209"
|
||||||
landmarkName = "textView(_:shouldInteractWith:in:interaction:)"
|
landmarkName = "textView(_:shouldInteractWith:in:interaction:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -62,8 +62,8 @@
|
|||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "296"
|
startingLineNumber = "213"
|
||||||
endingLineNumber = "296"
|
endingLineNumber = "213"
|
||||||
landmarkName = "textView(_:shouldInteractWith:in:interaction:)"
|
landmarkName = "textView(_:shouldInteractWith:in:interaction:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -78,8 +78,8 @@
|
|||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "126"
|
startingLineNumber = "82"
|
||||||
endingLineNumber = "126"
|
endingLineNumber = "82"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
<Locations>
|
<Locations>
|
||||||
@@ -131,102 +131,6 @@
|
|||||||
</Locations>
|
</Locations>
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
</BreakpointProxy>
|
</BreakpointProxy>
|
||||||
<BreakpointProxy
|
|
||||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
|
||||||
<BreakpointContent
|
|
||||||
uuid = "267443DB-1D9D-4100-AEA1-822E79AC826A"
|
|
||||||
shouldBeEnabled = "No"
|
|
||||||
ignoreCount = "0"
|
|
||||||
continueAfterRunningActions = "No"
|
|
||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
|
||||||
startingColumnNumber = "9223372036854775807"
|
|
||||||
endingColumnNumber = "9223372036854775807"
|
|
||||||
startingLineNumber = "112"
|
|
||||||
endingLineNumber = "112"
|
|
||||||
landmarkName = "addActions()"
|
|
||||||
landmarkType = "7">
|
|
||||||
</BreakpointContent>
|
|
||||||
</BreakpointProxy>
|
|
||||||
<BreakpointProxy
|
|
||||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
|
||||||
<BreakpointContent
|
|
||||||
uuid = "C0280646-2B16-4FEE-9244-D93DDEB1F77A"
|
|
||||||
shouldBeEnabled = "No"
|
|
||||||
ignoreCount = "0"
|
|
||||||
continueAfterRunningActions = "No"
|
|
||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
|
||||||
startingColumnNumber = "9223372036854775807"
|
|
||||||
endingColumnNumber = "9223372036854775807"
|
|
||||||
startingLineNumber = "84"
|
|
||||||
endingLineNumber = "84"
|
|
||||||
landmarkName = "addActions()"
|
|
||||||
landmarkType = "7">
|
|
||||||
</BreakpointContent>
|
|
||||||
</BreakpointProxy>
|
|
||||||
<BreakpointProxy
|
|
||||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
|
||||||
<BreakpointContent
|
|
||||||
uuid = "980964A8-1322-424C-AE3E-DF8C27A30C9C"
|
|
||||||
shouldBeEnabled = "No"
|
|
||||||
ignoreCount = "0"
|
|
||||||
continueAfterRunningActions = "No"
|
|
||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
|
||||||
startingColumnNumber = "9223372036854775807"
|
|
||||||
endingColumnNumber = "9223372036854775807"
|
|
||||||
startingLineNumber = "92"
|
|
||||||
endingLineNumber = "92"
|
|
||||||
landmarkName = "addActions()"
|
|
||||||
landmarkType = "7">
|
|
||||||
</BreakpointContent>
|
|
||||||
</BreakpointProxy>
|
|
||||||
<BreakpointProxy
|
|
||||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
|
||||||
<BreakpointContent
|
|
||||||
uuid = "19508AAD-AD4C-4BDF-81DE-F47DC21CD07D"
|
|
||||||
shouldBeEnabled = "No"
|
|
||||||
ignoreCount = "0"
|
|
||||||
continueAfterRunningActions = "No"
|
|
||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
|
||||||
startingColumnNumber = "9223372036854775807"
|
|
||||||
endingColumnNumber = "9223372036854775807"
|
|
||||||
startingLineNumber = "99"
|
|
||||||
endingLineNumber = "99"
|
|
||||||
landmarkName = "addActions()"
|
|
||||||
landmarkType = "7">
|
|
||||||
</BreakpointContent>
|
|
||||||
</BreakpointProxy>
|
|
||||||
<BreakpointProxy
|
|
||||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
|
||||||
<BreakpointContent
|
|
||||||
uuid = "75997BB3-3A8A-471B-AEBA-33634F502589"
|
|
||||||
shouldBeEnabled = "No"
|
|
||||||
ignoreCount = "0"
|
|
||||||
continueAfterRunningActions = "No"
|
|
||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
|
||||||
startingColumnNumber = "9223372036854775807"
|
|
||||||
endingColumnNumber = "9223372036854775807"
|
|
||||||
startingLineNumber = "88"
|
|
||||||
endingLineNumber = "88"
|
|
||||||
landmarkName = "addActions()"
|
|
||||||
landmarkType = "7">
|
|
||||||
</BreakpointContent>
|
|
||||||
</BreakpointProxy>
|
|
||||||
<BreakpointProxy
|
|
||||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
|
||||||
<BreakpointContent
|
|
||||||
uuid = "45AB1C2E-7406-4B5A-B0A1-13606A76B374"
|
|
||||||
shouldBeEnabled = "No"
|
|
||||||
ignoreCount = "0"
|
|
||||||
continueAfterRunningActions = "No"
|
|
||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
|
||||||
startingColumnNumber = "9223372036854775807"
|
|
||||||
endingColumnNumber = "9223372036854775807"
|
|
||||||
startingLineNumber = "103"
|
|
||||||
endingLineNumber = "103"
|
|
||||||
landmarkName = "addActions()"
|
|
||||||
landmarkType = "7">
|
|
||||||
</BreakpointContent>
|
|
||||||
</BreakpointProxy>
|
|
||||||
<BreakpointProxy
|
<BreakpointProxy
|
||||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
<BreakpointContent
|
<BreakpointContent
|
||||||
@@ -253,10 +157,10 @@
|
|||||||
filePath = "OrderScheduling/Main/Initial.swift"
|
filePath = "OrderScheduling/Main/Initial.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "154"
|
startingLineNumber = "159"
|
||||||
endingLineNumber = "154"
|
endingLineNumber = "159"
|
||||||
landmarkName = "networkErrorHandler(response:)"
|
landmarkName = "Initial"
|
||||||
landmarkType = "7">
|
landmarkType = "21">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
</BreakpointProxy>
|
</BreakpointProxy>
|
||||||
<BreakpointProxy
|
<BreakpointProxy
|
||||||
@@ -269,10 +173,10 @@
|
|||||||
filePath = "OrderScheduling/Main/Initial.swift"
|
filePath = "OrderScheduling/Main/Initial.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "155"
|
startingLineNumber = "160"
|
||||||
endingLineNumber = "155"
|
endingLineNumber = "160"
|
||||||
landmarkName = "Initial"
|
landmarkName = "errorCodeHandler(response:)"
|
||||||
landmarkType = "21">
|
landmarkType = "7">
|
||||||
<Locations>
|
<Locations>
|
||||||
<Location
|
<Location
|
||||||
uuid = "DF79959D-0BBA-40D3-A66A-F71619158179 - 4dcf9988e24c37f"
|
uuid = "DF79959D-0BBA-40D3-A66A-F71619158179 - 4dcf9988e24c37f"
|
||||||
@@ -1098,8 +1002,8 @@
|
|||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "203"
|
startingLineNumber = "167"
|
||||||
endingLineNumber = "203"
|
endingLineNumber = "167"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -1301,8 +1205,8 @@
|
|||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "207"
|
startingLineNumber = "171"
|
||||||
endingLineNumber = "207"
|
endingLineNumber = "171"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -1317,8 +1221,8 @@
|
|||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "211"
|
startingLineNumber = "175"
|
||||||
endingLineNumber = "211"
|
endingLineNumber = "175"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -1333,8 +1237,8 @@
|
|||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "214"
|
startingLineNumber = "178"
|
||||||
endingLineNumber = "214"
|
endingLineNumber = "178"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -1349,8 +1253,8 @@
|
|||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "227"
|
startingLineNumber = "191"
|
||||||
endingLineNumber = "227"
|
endingLineNumber = "191"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -1365,8 +1269,8 @@
|
|||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "215"
|
startingLineNumber = "179"
|
||||||
endingLineNumber = "215"
|
endingLineNumber = "179"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
<Locations>
|
<Locations>
|
||||||
@@ -1413,8 +1317,8 @@
|
|||||||
filePath = "OrderScheduling/Main/Initial.swift"
|
filePath = "OrderScheduling/Main/Initial.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "138"
|
startingLineNumber = "142"
|
||||||
endingLineNumber = "138"
|
endingLineNumber = "142"
|
||||||
landmarkName = "changeRootViewController(window:)"
|
landmarkName = "changeRootViewController(window:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -1429,8 +1333,8 @@
|
|||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "216"
|
startingLineNumber = "180"
|
||||||
endingLineNumber = "216"
|
endingLineNumber = "180"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -2029,8 +1933,8 @@
|
|||||||
filePath = "OrderScheduling/Main/Initial.swift"
|
filePath = "OrderScheduling/Main/Initial.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "129"
|
startingLineNumber = "133"
|
||||||
endingLineNumber = "129"
|
endingLineNumber = "133"
|
||||||
landmarkName = "changeRootViewController(window:)"
|
landmarkName = "changeRootViewController(window:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -2045,8 +1949,8 @@
|
|||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "128"
|
startingLineNumber = "84"
|
||||||
endingLineNumber = "128"
|
endingLineNumber = "84"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -2109,10 +2013,10 @@
|
|||||||
filePath = "OrderScheduling/Main/Initial.swift"
|
filePath = "OrderScheduling/Main/Initial.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "146"
|
startingLineNumber = "151"
|
||||||
endingLineNumber = "146"
|
endingLineNumber = "151"
|
||||||
landmarkName = "Initial"
|
landmarkName = "unknown"
|
||||||
landmarkType = "3">
|
landmarkType = "0">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
</BreakpointProxy>
|
</BreakpointProxy>
|
||||||
<BreakpointProxy
|
<BreakpointProxy
|
||||||
@@ -2125,8 +2029,8 @@
|
|||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "127"
|
startingLineNumber = "83"
|
||||||
endingLineNumber = "127"
|
endingLineNumber = "83"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
<Locations>
|
<Locations>
|
||||||
@@ -2173,8 +2077,8 @@
|
|||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "130"
|
startingLineNumber = "86"
|
||||||
endingLineNumber = "130"
|
endingLineNumber = "86"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -2189,8 +2093,8 @@
|
|||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "132"
|
startingLineNumber = "88"
|
||||||
endingLineNumber = "132"
|
endingLineNumber = "88"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -2924,8 +2828,8 @@
|
|||||||
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "155"
|
startingLineNumber = "111"
|
||||||
endingLineNumber = "155"
|
endingLineNumber = "111"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
<Locations>
|
<Locations>
|
||||||
@@ -4573,5 +4477,117 @@
|
|||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
</BreakpointProxy>
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "B0D3D43D-B092-4426-B7EF-92C26616D4F3"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "162"
|
||||||
|
endingLineNumber = "162"
|
||||||
|
landmarkName = "addActions()"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "5A8D6BF7-7F57-4803-AF97-7F4F52139252"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "163"
|
||||||
|
endingLineNumber = "163"
|
||||||
|
landmarkName = "addActions()"
|
||||||
|
landmarkType = "7">
|
||||||
|
<Locations>
|
||||||
|
<Location
|
||||||
|
uuid = "5A8D6BF7-7F57-4803-AF97-7F4F52139252 - 979cdd1c00468938"
|
||||||
|
shouldBeEnabled = "Yes"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
symbolName = "closure #11 (Swift.Bool) throws -> Swift.String in OrderScheduling.LoginController.addActions() -> ()"
|
||||||
|
moduleName = "OrderScheduling"
|
||||||
|
usesParentBreakpointCondition = "Yes"
|
||||||
|
urlString = "file:///Users/zd/Desktop/%E4%B8%AD%E9%81%93%E6%95%91%E6%8F%B4/OrderScheduling/OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "161"
|
||||||
|
endingLineNumber = "161"
|
||||||
|
offsetFromSymbolStart = "3236">
|
||||||
|
</Location>
|
||||||
|
<Location
|
||||||
|
uuid = "5A8D6BF7-7F57-4803-AF97-7F4F52139252 - 979cdd1c00468938"
|
||||||
|
shouldBeEnabled = "Yes"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
symbolName = "closure #11 (Swift.Bool) throws -> Swift.String in OrderScheduling.LoginController.addActions() -> ()"
|
||||||
|
moduleName = "OrderScheduling"
|
||||||
|
usesParentBreakpointCondition = "Yes"
|
||||||
|
urlString = "file:///Users/zd/Desktop/%E4%B8%AD%E9%81%93%E6%95%91%E6%8F%B4/OrderScheduling/OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "161"
|
||||||
|
endingLineNumber = "161"
|
||||||
|
offsetFromSymbolStart = "3280">
|
||||||
|
</Location>
|
||||||
|
</Locations>
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "7A9D46CC-B889-4583-A810-2B96251BE9DB"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "164"
|
||||||
|
endingLineNumber = "164"
|
||||||
|
landmarkName = "addActions()"
|
||||||
|
landmarkType = "7">
|
||||||
|
<Locations>
|
||||||
|
<Location
|
||||||
|
uuid = "7A9D46CC-B889-4583-A810-2B96251BE9DB - 979cdd1c0046891b"
|
||||||
|
shouldBeEnabled = "Yes"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
symbolName = "closure #11 (Swift.Bool) throws -> Swift.String in OrderScheduling.LoginController.addActions() -> ()"
|
||||||
|
moduleName = "OrderScheduling"
|
||||||
|
usesParentBreakpointCondition = "Yes"
|
||||||
|
urlString = "file:///Users/zd/Desktop/%E4%B8%AD%E9%81%93%E6%95%91%E6%8F%B4/OrderScheduling/OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "162"
|
||||||
|
endingLineNumber = "162"
|
||||||
|
offsetFromSymbolStart = "3416">
|
||||||
|
</Location>
|
||||||
|
<Location
|
||||||
|
uuid = "7A9D46CC-B889-4583-A810-2B96251BE9DB - 979cdd1c0046891b"
|
||||||
|
shouldBeEnabled = "Yes"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
symbolName = "closure #11 (Swift.Bool) throws -> Swift.String in OrderScheduling.LoginController.addActions() -> ()"
|
||||||
|
moduleName = "OrderScheduling"
|
||||||
|
usesParentBreakpointCondition = "Yes"
|
||||||
|
urlString = "file:///Users/zd/Desktop/%E4%B8%AD%E9%81%93%E6%95%91%E6%8F%B4/OrderScheduling/OrderScheduling/Login/ViewController/LoginController.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "162"
|
||||||
|
endingLineNumber = "162"
|
||||||
|
offsetFromSymbolStart = "3460">
|
||||||
|
</Location>
|
||||||
|
</Locations>
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
</Breakpoints>
|
</Breakpoints>
|
||||||
</Bucket>
|
</Bucket>
|
||||||
|
|||||||
@@ -22,9 +22,7 @@ public struct LoginCodeParameters : Encodable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public struct CheckLoginParameters : Encodable {
|
public struct CheckLoginParameters : Encodable {
|
||||||
var supplierLoginCode : String
|
var username : String
|
||||||
var phone : String
|
|
||||||
var code : String
|
|
||||||
var clientType : String = "rescueApp"
|
var clientType : String = "rescueApp"
|
||||||
var deviceId : String
|
var deviceId : String
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import DDProgressHUDKit_Private
|
|||||||
import DDAutoUIKit_Private
|
import DDAutoUIKit_Private
|
||||||
import DDControlsKit_Private
|
import DDControlsKit_Private
|
||||||
import DDUtilsSwiftKit_Private
|
import DDUtilsSwiftKit_Private
|
||||||
|
import SwiftyRSA
|
||||||
|
|
||||||
class LoginController : ZDViewController {
|
class LoginController : ZDViewController {
|
||||||
private let disposeBag = DisposeBag()
|
private let disposeBag = DisposeBag()
|
||||||
@@ -40,19 +41,11 @@ extension LoginController {
|
|||||||
|
|
||||||
loginView.backgroundImageView.image = UIImage(named: "login_backgroundImage")
|
loginView.backgroundImageView.image = UIImage(named: "login_backgroundImage")
|
||||||
loginView.inputContentView.backgroundColor = UIColor.white
|
loginView.inputContentView.backgroundColor = UIColor.white
|
||||||
loginView.serviceProviderView.titleLabel.text = "服务商编号"
|
loginView.phoneView.titleLabel.text = "用户名"
|
||||||
loginView.serviceProviderView.textfield.attributedPlaceholder = NSAttributedString(string: "请输入服务商编号",attributes: [.foregroundColor: UIColor.hex("203152").alpha(0.2),.font:UIFont.regularFont(auto(14))])
|
loginView.phoneView.textfield.attributedPlaceholder = NSAttributedString(string: "请输入用户名",attributes: [.foregroundColor: UIColor.hex("203152").alpha(0.2),.font:UIFont.regularFont(auto(14))])
|
||||||
loginView.serviceProviderView.textfield.text = USER.supplierName
|
|
||||||
loginView.phoneView.titleLabel.text = "用户手机号"
|
|
||||||
loginView.phoneView.textfield.attributedPlaceholder = NSAttributedString(string: "请输入手机号",attributes: [.foregroundColor: UIColor.hex("203152").alpha(0.2),.font:UIFont.regularFont(auto(14))])
|
|
||||||
loginView.phoneView.textfield.text = USER.phone
|
loginView.phoneView.textfield.text = USER.phone
|
||||||
loginView.codeView.titleLabel.text = "验证码"
|
loginView.codeView.titleLabel.text = "密码"
|
||||||
loginView.codeView.textfield.attributedPlaceholder = NSAttributedString(string: "请输入验证码",attributes: [.foregroundColor: UIColor.hex("203152").alpha(0.2),.font:UIFont.regularFont(auto(14))])
|
loginView.codeView.textfield.attributedPlaceholder = NSAttributedString(string: "请输入密码",attributes: [.foregroundColor: UIColor.hex("203152").alpha(0.2),.font:UIFont.regularFont(auto(14))])
|
||||||
loginView.codeView.codeButton.layer.borderColor = UIColor.hex("3364B7").alpha(0.8).cgColor
|
|
||||||
loginView.codeView.codeButton.layer.borderWidth = 1
|
|
||||||
loginView.codeView.codeButton.setTitle("获取验证码", for: .normal)
|
|
||||||
loginView.codeView.codeButton.setTitleColor(.hex("3364B7").alpha(0.8), for: .normal)
|
|
||||||
loginView.codeView.codeButton.titleLabel?.font = .regularFont(auto(13))
|
|
||||||
loginView.agreeButton.setBackgroundImage(UIImage(named: "login_agree_unselected"), for: .normal)
|
loginView.agreeButton.setBackgroundImage(UIImage(named: "login_agree_unselected"), for: .normal)
|
||||||
loginView.agreeButton.setBackgroundImage(UIImage(named: "login_agree_selected"), for: .selected)
|
loginView.agreeButton.setBackgroundImage(UIImage(named: "login_agree_selected"), for: .selected)
|
||||||
let privacyText = NSAttributedString.init(string: "已阅读并同意",attributes: [.foregroundColor:UIColor.hex("203152"),.font:UIFont.regularFont(auto(14))]).dd_mutable()
|
let privacyText = NSAttributedString.init(string: "已阅读并同意",attributes: [.foregroundColor:UIColor.hex("203152"),.font:UIFont.regularFont(auto(14))]).dd_mutable()
|
||||||
@@ -74,43 +67,6 @@ extension LoginController {
|
|||||||
}
|
}
|
||||||
extension LoginController {
|
extension LoginController {
|
||||||
func addActions() {
|
func addActions() {
|
||||||
loginView.codeView.codeButton.rx.tap
|
|
||||||
.observe(on: MainScheduler.instance)
|
|
||||||
.filter({[weak self] _ in
|
|
||||||
if self?.loginView.phoneView.textfield.text?.isEmpty == true {
|
|
||||||
self?.view.dd_makeToast(loginInputPhone)
|
|
||||||
}
|
|
||||||
return self?.loginView.phoneView.textfield.text?.isEmpty == false
|
|
||||||
})
|
|
||||||
.observe(on: MainScheduler.instance)
|
|
||||||
.do(onNext: {[weak self] _ in
|
|
||||||
self?.codeButtonBinder.onNext(false)
|
|
||||||
self?.view.dd_showHUD()
|
|
||||||
})
|
|
||||||
.flatMapLatest({[weak self] _ in
|
|
||||||
return RQ.loginCode(parameters: LoginCodeParameters(phone: self?.loginView.phoneView.textfield.text ?? ""))
|
|
||||||
})
|
|
||||||
.observe(on: MainScheduler.instance)
|
|
||||||
.do(onNext: {[weak self] _ in
|
|
||||||
self?.view.dd_hideHUD()
|
|
||||||
})
|
|
||||||
.flatMapLatest {[weak self] _ in
|
|
||||||
return self?.codeButtonTimer() ?? Observable.just(0)
|
|
||||||
}
|
|
||||||
.observe(on: MainScheduler.instance)
|
|
||||||
.do(onNext: {[weak self] duration in
|
|
||||||
if duration == 0 {
|
|
||||||
self?.codeButtonBinder.onNext(true)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.observe(on: MainScheduler.instance)
|
|
||||||
.flatMapLatest {[weak self] duration in
|
|
||||||
return self?.codeButtonStateChange(duration: duration) ?? Observable.just(nil)
|
|
||||||
}
|
|
||||||
.subscribe(onNext: { _ in
|
|
||||||
})
|
|
||||||
.disposed(by: disposeBag)
|
|
||||||
|
|
||||||
loginView.agreeButton.rx.tap
|
loginView.agreeButton.rx.tap
|
||||||
.asDriver()
|
.asDriver()
|
||||||
.drive(onNext: {[weak self] _ in
|
.drive(onNext: {[weak self] _ in
|
||||||
@@ -121,10 +77,10 @@ extension LoginController {
|
|||||||
})
|
})
|
||||||
.disposed(by: disposeBag)
|
.disposed(by: disposeBag)
|
||||||
|
|
||||||
Observable.combineLatest(loginView.serviceProviderView.textfield.rx.text, loginView.phoneView.textfield.rx.text, loginView.codeView.textfield.rx.text,agreeSub)
|
Observable.combineLatest(loginView.phoneView.textfield.rx.text, loginView.codeView.textfield.rx.text,agreeSub)
|
||||||
.asDriver(onErrorJustReturn: ("","","",false))
|
.asDriver(onErrorJustReturn: ("","",false))
|
||||||
.drive(onNext: {[weak self] (serviceProvider,phone,code,isAgree) in
|
.drive(onNext: {[weak self] (phone,code,isAgree) in
|
||||||
if serviceProvider?.isEmpty == false && phone?.isEmpty == false && code?.isEmpty == false && isAgree == true {
|
if phone?.isEmpty == false && code?.isEmpty == false && isAgree == true {
|
||||||
self?.loginView.loginButton.isEnabled = true
|
self?.loginView.loginButton.isEnabled = true
|
||||||
self?.loginView.loginButton.backgroundColor = .hex("1C6CCE").alpha(1)
|
self?.loginView.loginButton.backgroundColor = .hex("1C6CCE").alpha(1)
|
||||||
}else{
|
}else{
|
||||||
@@ -140,7 +96,7 @@ extension LoginController {
|
|||||||
self?.view.dd_showHUD()
|
self?.view.dd_showHUD()
|
||||||
})
|
})
|
||||||
.map({[weak self] _ in
|
.map({[weak self] _ in
|
||||||
CheckLoginParameters(supplierLoginCode: self?.loginView.serviceProviderView.textfield.text ?? "", phone: self?.loginView.phoneView.textfield.text ?? "", code: self?.loginView.codeView.textfield.text ?? "", deviceId: USER.deviceToken ?? "")
|
CheckLoginParameters(username: self?.loginView.phoneView.textfield.text ?? "", deviceId: USER.deviceToken ?? "")
|
||||||
})
|
})
|
||||||
.flatMapLatest({ checkLoginParameters in
|
.flatMapLatest({ checkLoginParameters in
|
||||||
return RQ.checkLogin(parameters: checkLoginParameters)
|
return RQ.checkLogin(parameters: checkLoginParameters)
|
||||||
@@ -187,10 +143,8 @@ extension LoginController {
|
|||||||
self?.view.dd_showHUD()
|
self?.view.dd_showHUD()
|
||||||
})
|
})
|
||||||
.map({[weak self] _ in
|
.map({[weak self] _ in
|
||||||
let phone = self?.loginView.phoneView.textfield.text ?? ""
|
let username = self?.loginView.phoneView.textfield.text ?? ""
|
||||||
let code = self?.loginView.codeView.textfield.text ?? ""
|
|
||||||
let clientType = "rescueApp"
|
let clientType = "rescueApp"
|
||||||
let supplierLoginCode = self?.loginView.serviceProviderView.textfield.text ?? ""
|
|
||||||
let appVsersion = APPINFO.bundleVersionShort()
|
let appVsersion = APPINFO.bundleVersionShort()
|
||||||
let brand = "iPhone"
|
let brand = "iPhone"
|
||||||
let model = DEVICEINFO.deviceModel()
|
let model = DEVICEINFO.deviceModel()
|
||||||
@@ -199,7 +153,17 @@ extension LoginController {
|
|||||||
let deviceId = USER.deviceToken ?? ""
|
let deviceId = USER.deviceToken ?? ""
|
||||||
let regId = USER.regId ?? ""
|
let regId = USER.regId ?? ""
|
||||||
|
|
||||||
let str = "{\"phone\":\"\(phone)\",\"code\":\"\(code)\",\"clientType\":\"\(clientType)\",\"supplierLoginCode\":\"\(supplierLoginCode)\",\"appVersion\":\"\(appVsersion)\",\"brand\":\"\(brand)\",\"model\":\"\(model)\",\"sdkRelease\":\"\(sdkRelease)\",\"platform\":\"\(platform)\",\"deviceId\":\"\(deviceId)\",\"regId\":\"\(regId)\"}"
|
let timeInterval = Int(Date().timeIntervalSince1970)
|
||||||
|
|
||||||
|
let publicKey = try PublicKey(pemEncoded: "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf05hs909mzFcBmZez2HfiElirxm89cJVmPIB6x63EnErH1gDpEDwkTIA9iNPBx7b9TwraGIktZ/+qQK17aRrHuD9Bd2KoJaZ1+p3slilEP53ub+I/bd/klDYGgXWooxJ4N8H8MBk/xKgB3MLqVMPf54G9hBtfetodWGYSPr/TrwIDAQAB")
|
||||||
|
|
||||||
|
let pwd = self?.loginView.codeView.textfield.text ?? ""
|
||||||
|
let pwdStr = "rescueApp${\(pwd)}${\(timeInterval)}"
|
||||||
|
let clear = try? ClearMessage(string: pwdStr, using: .utf8)
|
||||||
|
let encrypted = try? clear?.encrypted(with: publicKey, padding: .PKCS1)
|
||||||
|
let base64String = encrypted?.base64String ?? ""
|
||||||
|
|
||||||
|
let str = "{\"username\":\"\(username)\",\"password\":\"\(base64String)\",\"timestamp\":\"\(timeInterval)\",\"clientType\":\"\(clientType)\",\"appVersion\":\"\(appVsersion)\",\"brand\":\"\(brand)\",\"model\":\"\(model)\",\"sdkRelease\":\"\(sdkRelease)\",\"platform\":\"\(platform)\",\"deviceId\":\"\(deviceId)\",\"regId\":\"\(regId)\"}"
|
||||||
return str
|
return str
|
||||||
})
|
})
|
||||||
.flatMapLatest({ app_login_json in
|
.flatMapLatest({ app_login_json in
|
||||||
@@ -216,7 +180,7 @@ extension LoginController {
|
|||||||
USER.setRefreshToken(token: responseModel?.data?.refreshToken.tokenValue)
|
USER.setRefreshToken(token: responseModel?.data?.refreshToken.tokenValue)
|
||||||
USER.setSupplierType(supplierType: responseModel?.data?.additionalParameters.user_info?.supplierType)
|
USER.setSupplierType(supplierType: responseModel?.data?.additionalParameters.user_info?.supplierType)
|
||||||
USER.setPhone(phone: self?.loginView.phoneView.textfield.text)
|
USER.setPhone(phone: self?.loginView.phoneView.textfield.text)
|
||||||
USER.setSupplierName(supplierName: self?.loginView.serviceProviderView.textfield.text)
|
USER.setSupplierName(supplierName: responseModel?.data?.additionalParameters.user_info?.supplierName)
|
||||||
USER.setUserId(userId: responseModel?.data?.additionalParameters.user_info?.userId)
|
USER.setUserId(userId: responseModel?.data?.additionalParameters.user_info?.userId)
|
||||||
USER.setSupplierId(supplierId: responseModel?.data?.additionalParameters.user_info?.supplierId)
|
USER.setSupplierId(supplierId: responseModel?.data?.additionalParameters.user_info?.supplierId)
|
||||||
}
|
}
|
||||||
@@ -231,69 +195,22 @@ extension LoginController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extension LoginController {
|
extension LoginController {
|
||||||
var codeButtonBinder : Binder<Bool> {
|
|
||||||
return Binder(loginView.codeView.codeButton) { codeButton, isEnable in
|
|
||||||
codeButton.isEnabled = isEnable
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var agreeButtonBinder : Binder<Bool> {
|
var agreeButtonBinder : Binder<Bool> {
|
||||||
return Binder(loginView.agreeButton) { agreeButton, isSelected in
|
return Binder(loginView.agreeButton) { agreeButton, isSelected in
|
||||||
agreeButton.isSelected = isSelected
|
agreeButton.isSelected = isSelected
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func codeButtonIsEnable(isEnable:Bool) -> Observable<Bool> {
|
|
||||||
return Observable.create {[weak self] ob in
|
|
||||||
self?.loginView.codeView.codeButton.isEnabled = isEnable
|
|
||||||
ob.onNext(isEnable)
|
|
||||||
ob.onCompleted()
|
|
||||||
return Disposables.create()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func codeButtonStateChange(duration:Int) -> Observable<Any?>{
|
|
||||||
return Observable.create {[weak self] ob in
|
|
||||||
if duration == 0 {
|
|
||||||
self?.loginView.codeView.codeButton.layer.borderColor = UIColor.hex("3364B7").alpha(0.8).cgColor
|
|
||||||
self?.loginView.codeView.codeButton.setTitle("获取验证码", for: .normal)
|
|
||||||
self?.loginView.codeView.codeButton.setTitleColor(.hex("3364B7").alpha(0.8), for: .normal)
|
|
||||||
}else{
|
|
||||||
self?.loginView.codeView.codeButton.setTitle("\(duration)s重新获取", for: .normal)
|
|
||||||
self?.loginView.codeView.codeButton.setTitleColor(.hex("939BAB").alpha(0.8), for: .normal)
|
|
||||||
self?.loginView.codeView.codeButton.layer.borderColor = UIColor.hex("939BAB").alpha(0.8).cgColor
|
|
||||||
}
|
|
||||||
ob.onNext(nil)
|
|
||||||
ob.onCompleted()
|
|
||||||
return Disposables.create()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func codeButtonTimer() -> Observable<Int> {
|
|
||||||
return Observable.create { ob in
|
|
||||||
var duration = 60
|
|
||||||
GCDT.addGCDTimer(named: login_code_timer_key, delay: DispatchTimeInterval.seconds(0), repeating: DispatchTimeInterval.seconds(1)) {
|
|
||||||
duration-=1
|
|
||||||
ob.onNext(duration)
|
|
||||||
if duration == 0 {
|
|
||||||
ob.onCompleted()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Disposables.create {
|
|
||||||
GCDT.cancelGCDTimer(named: login_code_timer_key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension LoginController : UITextViewDelegate {
|
extension LoginController : UITextViewDelegate {
|
||||||
public func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
|
public func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
|
||||||
if URL.absoluteString == login_attach_userAgreement_key {
|
if URL.absoluteString == login_attach_userAgreement_key {
|
||||||
let vc = WebViewController.init(title: "用户协议",url: "https://backend.hichefu.com/agreement")
|
// let vc = WebViewController.init(title: "用户协议",url: "")
|
||||||
navigationController?.pushViewController(vc, animated: true)
|
// navigationController?.pushViewController(vc, animated: true)
|
||||||
}
|
}
|
||||||
if URL.absoluteString == login_attach_privacy_key {
|
if URL.absoluteString == login_attach_privacy_key {
|
||||||
let vc = WebViewController.init(title: "隐私协议",url: "https://backend.hichefu.com/agreement")
|
// let vc = WebViewController.init(title: "隐私协议",url: "")
|
||||||
navigationController?.pushViewController(vc, animated: true)
|
// navigationController?.pushViewController(vc, animated: true)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -302,7 +219,6 @@ extension LoginController : UITextViewDelegate {
|
|||||||
class LoginView : DDView {
|
class LoginView : DDView {
|
||||||
public let backgroundImageView : DDImageView
|
public let backgroundImageView : DDImageView
|
||||||
public let inputContentView : DDView
|
public let inputContentView : DDView
|
||||||
public let serviceProviderView : LoginInputView
|
|
||||||
public let phoneView : LoginInputView
|
public let phoneView : LoginInputView
|
||||||
public let codeView : LoginInputView
|
public let codeView : LoginInputView
|
||||||
public let agreeButton : DDButton
|
public let agreeButton : DDButton
|
||||||
@@ -311,7 +227,6 @@ class LoginView : DDView {
|
|||||||
override init(frame: CGRect) {
|
override init(frame: CGRect) {
|
||||||
backgroundImageView = DDImageView.init()
|
backgroundImageView = DDImageView.init()
|
||||||
inputContentView = DDView.init()
|
inputContentView = DDView.init()
|
||||||
serviceProviderView = LoginInputView.init()
|
|
||||||
phoneView = LoginInputView.init()
|
phoneView = LoginInputView.init()
|
||||||
codeView = LoginInputView.init()
|
codeView = LoginInputView.init()
|
||||||
agreeButton = DDButton.init()
|
agreeButton = DDButton.init()
|
||||||
@@ -325,13 +240,13 @@ class LoginView : DDView {
|
|||||||
inputContentView.layer.shadowOffset = CGSize(width: 0, height: 0)
|
inputContentView.layer.shadowOffset = CGSize(width: 0, height: 0)
|
||||||
inputContentView.layer.shadowOpacity = 1
|
inputContentView.layer.shadowOpacity = 1
|
||||||
addSubview(inputContentView)
|
addSubview(inputContentView)
|
||||||
inputContentView.addSubview(serviceProviderView)
|
phoneView.textfield.keyboardType = .default
|
||||||
phoneView.textfield.keyboardType = .numberPad
|
|
||||||
inputContentView.addSubview(phoneView)
|
inputContentView.addSubview(phoneView)
|
||||||
codeView.textfield.keyboardType = .numberPad
|
codeView.textfield.keyboardType = .default
|
||||||
inputContentView.addSubview(codeView)
|
inputContentView.addSubview(codeView)
|
||||||
agreeButton.contentMode = .scaleAspectFill
|
agreeButton.contentMode = .scaleAspectFill
|
||||||
inputContentView.addSubview(agreeButton)
|
inputContentView.addSubview(agreeButton)
|
||||||
|
agreeTextView.isSelectable = false
|
||||||
inputContentView.addSubview(agreeTextView)
|
inputContentView.addSubview(agreeTextView)
|
||||||
loginButton.isEnabled = false
|
loginButton.isEnabled = false
|
||||||
addSubview(loginButton)
|
addSubview(loginButton)
|
||||||
@@ -345,26 +260,20 @@ class LoginView : DDView {
|
|||||||
inputContentView.snp.makeConstraints { make in
|
inputContentView.snp.makeConstraints { make in
|
||||||
make.centerX.equalToSuperview()
|
make.centerX.equalToSuperview()
|
||||||
make.top.equalTo(backgroundImageView.snp.bottom).offset(-auto(180))
|
make.top.equalTo(backgroundImageView.snp.bottom).offset(-auto(180))
|
||||||
make.height.equalTo(auto(280))
|
make.height.equalTo(auto(205))
|
||||||
make.width.equalTo(auto(340))
|
make.width.equalTo(auto(340))
|
||||||
}
|
}
|
||||||
|
|
||||||
serviceProviderView.snp.makeConstraints { make in
|
|
||||||
make.top.equalToSuperview()
|
|
||||||
make.left.right.equalToSuperview()
|
|
||||||
make.height.equalTo(auto(75))
|
|
||||||
}
|
|
||||||
|
|
||||||
phoneView.snp.makeConstraints { make in
|
phoneView.snp.makeConstraints { make in
|
||||||
make.left.right.equalToSuperview()
|
make.left.right.equalToSuperview()
|
||||||
make.top.equalTo(serviceProviderView.snp.bottom)
|
make.top.equalToSuperview()
|
||||||
make.height.equalTo(serviceProviderView)
|
make.height.equalTo(auto(75))
|
||||||
}
|
}
|
||||||
|
|
||||||
codeView.snp.makeConstraints { make in
|
codeView.snp.makeConstraints { make in
|
||||||
make.left.right.equalToSuperview()
|
make.left.right.equalToSuperview()
|
||||||
make.top.equalTo(phoneView.snp.bottom)
|
make.top.equalTo(phoneView.snp.bottom)
|
||||||
make.height.equalTo(serviceProviderView)
|
make.height.equalTo(phoneView)
|
||||||
}
|
}
|
||||||
|
|
||||||
agreeButton.snp.makeConstraints { make in
|
agreeButton.snp.makeConstraints { make in
|
||||||
@@ -398,19 +307,16 @@ class LoginInputView : DDView {
|
|||||||
public let titleLabel : DDLabel
|
public let titleLabel : DDLabel
|
||||||
public let textfield : DDTextField
|
public let textfield : DDTextField
|
||||||
public let line : DDView
|
public let line : DDView
|
||||||
public let codeButton : DDButton
|
|
||||||
override init(frame: CGRect) {
|
override init(frame: CGRect) {
|
||||||
titleLabel = DDLabel.dd_init(withText: "", font: .regularFont(auto(15)), textColor: .hex("203152"))
|
titleLabel = DDLabel.dd_init(withText: "", font: .regularFont(auto(15)), textColor: .hex("203152"))
|
||||||
textfield = DDTextField.init()
|
textfield = DDTextField.init()
|
||||||
line = DDView.init()
|
line = DDView.init()
|
||||||
line.backgroundColor = .hex("F1F2F5")
|
line.backgroundColor = .hex("F1F2F5")
|
||||||
codeButton = DDButton.dd_initCustom()
|
|
||||||
super.init(frame: frame)
|
super.init(frame: frame)
|
||||||
|
|
||||||
addSubview(titleLabel)
|
addSubview(titleLabel)
|
||||||
addSubview(textfield)
|
addSubview(textfield)
|
||||||
addSubview(line)
|
addSubview(line)
|
||||||
addSubview(codeButton)
|
|
||||||
|
|
||||||
line.snp.makeConstraints { make in
|
line.snp.makeConstraints { make in
|
||||||
make.bottom.equalToSuperview()
|
make.bottom.equalToSuperview()
|
||||||
@@ -428,16 +334,9 @@ class LoginInputView : DDView {
|
|||||||
make.left.equalTo(titleLabel)
|
make.left.equalTo(titleLabel)
|
||||||
make.bottom.equalTo(line.snp.top).offset(-auto(5))
|
make.bottom.equalTo(line.snp.top).offset(-auto(5))
|
||||||
make.left.equalTo(line)
|
make.left.equalTo(line)
|
||||||
make.right.equalTo(codeButton.snp.left)
|
make.right.equalToSuperview()
|
||||||
}
|
|
||||||
|
|
||||||
codeButton.layer.cornerRadius = auto(12.5)
|
|
||||||
codeButton.snp.makeConstraints { make in
|
|
||||||
make.centerY.equalTo(textfield)
|
|
||||||
make.right.equalTo(line)
|
|
||||||
make.height.equalTo(auto(25))
|
|
||||||
make.width.equalTo(auto(90))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
required public init?(coder: NSCoder) {
|
required public init?(coder: NSCoder) {
|
||||||
|
|||||||
@@ -117,6 +117,10 @@ class Initial : NSObject {
|
|||||||
APPUPDATE.requestAppUpdateRelay.accept(.auto)
|
APPUPDATE.requestAppUpdateRelay.accept(.auto)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func initNewestMessage() {
|
||||||
|
MCOUNT.newestMessage()
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: <RootViewController>
|
// MARK: <RootViewController>
|
||||||
func initRootViewController(){
|
func initRootViewController(){
|
||||||
if USER.isLogin == true {
|
if USER.isLogin == true {
|
||||||
@@ -140,6 +144,7 @@ class Initial : NSObject {
|
|||||||
self?.initPermission()
|
self?.initPermission()
|
||||||
self?.initAppUpdate()
|
self?.initAppUpdate()
|
||||||
self?.initRefreshToken()
|
self?.initRefreshToken()
|
||||||
|
self?.initNewestMessage()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
1
Podfile
1
Podfile
@@ -36,6 +36,7 @@ target 'OrderScheduling' do
|
|||||||
pod 'DDDateKit_Private'
|
pod 'DDDateKit_Private'
|
||||||
pod 'DDUtilsSwiftKit_Private'
|
pod 'DDUtilsSwiftKit_Private'
|
||||||
pod 'Bugly'
|
pod 'Bugly'
|
||||||
|
pod 'SwiftyRSA'
|
||||||
|
|
||||||
post_install do |installer|
|
post_install do |installer|
|
||||||
installer.pods_project.targets.each do |target|
|
installer.pods_project.targets.each do |target|
|
||||||
|
|||||||
@@ -297,6 +297,9 @@ PODS:
|
|||||||
- RxSwift (6.5.0)
|
- RxSwift (6.5.0)
|
||||||
- SnapKit (5.6.0)
|
- SnapKit (5.6.0)
|
||||||
- SwiftEntryKit (2.0.0)
|
- SwiftEntryKit (2.0.0)
|
||||||
|
- SwiftyRSA (1.7.0):
|
||||||
|
- SwiftyRSA/ObjC (= 1.7.0)
|
||||||
|
- SwiftyRSA/ObjC (1.7.0)
|
||||||
- ZLPhotoBrowser (4.4.3.2):
|
- ZLPhotoBrowser (4.4.3.2):
|
||||||
- ZLPhotoBrowser/Core (= 4.4.3.2)
|
- ZLPhotoBrowser/Core (= 4.4.3.2)
|
||||||
- ZLPhotoBrowser/Core (4.4.3.2)
|
- ZLPhotoBrowser/Core (4.4.3.2)
|
||||||
@@ -331,6 +334,7 @@ DEPENDENCIES:
|
|||||||
- RxSwift
|
- RxSwift
|
||||||
- SnapKit
|
- SnapKit
|
||||||
- SwiftEntryKit
|
- SwiftEntryKit
|
||||||
|
- SwiftyRSA
|
||||||
- ZLPhotoBrowser
|
- ZLPhotoBrowser
|
||||||
|
|
||||||
SPEC REPOS:
|
SPEC REPOS:
|
||||||
@@ -374,6 +378,7 @@ SPEC REPOS:
|
|||||||
- RxSwift
|
- RxSwift
|
||||||
- SnapKit
|
- SnapKit
|
||||||
- SwiftEntryKit
|
- SwiftEntryKit
|
||||||
|
- SwiftyRSA
|
||||||
- ZLPhotoBrowser
|
- ZLPhotoBrowser
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
@@ -415,8 +420,9 @@ SPEC CHECKSUMS:
|
|||||||
RxSwift: 5710a9e6b17f3c3d6e40d6e559b9fa1e813b2ef8
|
RxSwift: 5710a9e6b17f3c3d6e40d6e559b9fa1e813b2ef8
|
||||||
SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25
|
SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25
|
||||||
SwiftEntryKit: 61b5fa36f34a97dd8013e48a7345bc4c4720be9a
|
SwiftEntryKit: 61b5fa36f34a97dd8013e48a7345bc4c4720be9a
|
||||||
|
SwiftyRSA: 8c6dd1ea7db1b8dc4fb517a202f88bb1354bc2c6
|
||||||
ZLPhotoBrowser: 0563c2bfc7b247b65d023d646012f46cba94101b
|
ZLPhotoBrowser: 0563c2bfc7b247b65d023d646012f46cba94101b
|
||||||
|
|
||||||
PODFILE CHECKSUM: 54816ab62e42f5b8ee1aec46e52e7bbfd34873a6
|
PODFILE CHECKSUM: 238c7b02af4b658816837b53dba7a110c1cdd982
|
||||||
|
|
||||||
COCOAPODS: 1.11.3
|
COCOAPODS: 1.11.3
|
||||||
|
|||||||
1
Pods/Headers/Private/SwiftyRSA/NSData+SHA.h
generated
Symbolic link
1
Pods/Headers/Private/SwiftyRSA/NSData+SHA.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../SwiftyRSA/Source/NSData+SHA.h
|
||||||
1
Pods/Headers/Private/SwiftyRSA/SwiftyRSA.h
generated
Symbolic link
1
Pods/Headers/Private/SwiftyRSA/SwiftyRSA.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../SwiftyRSA/Source/SwiftyRSA.h
|
||||||
1
Pods/Headers/Public/SwiftyRSA/NSData+SHA.h
generated
Symbolic link
1
Pods/Headers/Public/SwiftyRSA/NSData+SHA.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../SwiftyRSA/Source/NSData+SHA.h
|
||||||
1
Pods/Headers/Public/SwiftyRSA/SwiftyRSA-umbrella.h
generated
Symbolic link
1
Pods/Headers/Public/SwiftyRSA/SwiftyRSA-umbrella.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../Target Support Files/SwiftyRSA/SwiftyRSA-umbrella.h
|
||||||
1
Pods/Headers/Public/SwiftyRSA/SwiftyRSA.h
generated
Symbolic link
1
Pods/Headers/Public/SwiftyRSA/SwiftyRSA.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../SwiftyRSA/Source/SwiftyRSA.h
|
||||||
1
Pods/Headers/Public/SwiftyRSA/SwiftyRSA.modulemap
generated
Symbolic link
1
Pods/Headers/Public/SwiftyRSA/SwiftyRSA.modulemap
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../Target Support Files/SwiftyRSA/SwiftyRSA.modulemap
|
||||||
8
Pods/Manifest.lock
generated
8
Pods/Manifest.lock
generated
@@ -297,6 +297,9 @@ PODS:
|
|||||||
- RxSwift (6.5.0)
|
- RxSwift (6.5.0)
|
||||||
- SnapKit (5.6.0)
|
- SnapKit (5.6.0)
|
||||||
- SwiftEntryKit (2.0.0)
|
- SwiftEntryKit (2.0.0)
|
||||||
|
- SwiftyRSA (1.7.0):
|
||||||
|
- SwiftyRSA/ObjC (= 1.7.0)
|
||||||
|
- SwiftyRSA/ObjC (1.7.0)
|
||||||
- ZLPhotoBrowser (4.4.3.2):
|
- ZLPhotoBrowser (4.4.3.2):
|
||||||
- ZLPhotoBrowser/Core (= 4.4.3.2)
|
- ZLPhotoBrowser/Core (= 4.4.3.2)
|
||||||
- ZLPhotoBrowser/Core (4.4.3.2)
|
- ZLPhotoBrowser/Core (4.4.3.2)
|
||||||
@@ -331,6 +334,7 @@ DEPENDENCIES:
|
|||||||
- RxSwift
|
- RxSwift
|
||||||
- SnapKit
|
- SnapKit
|
||||||
- SwiftEntryKit
|
- SwiftEntryKit
|
||||||
|
- SwiftyRSA
|
||||||
- ZLPhotoBrowser
|
- ZLPhotoBrowser
|
||||||
|
|
||||||
SPEC REPOS:
|
SPEC REPOS:
|
||||||
@@ -374,6 +378,7 @@ SPEC REPOS:
|
|||||||
- RxSwift
|
- RxSwift
|
||||||
- SnapKit
|
- SnapKit
|
||||||
- SwiftEntryKit
|
- SwiftEntryKit
|
||||||
|
- SwiftyRSA
|
||||||
- ZLPhotoBrowser
|
- ZLPhotoBrowser
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
@@ -415,8 +420,9 @@ SPEC CHECKSUMS:
|
|||||||
RxSwift: 5710a9e6b17f3c3d6e40d6e559b9fa1e813b2ef8
|
RxSwift: 5710a9e6b17f3c3d6e40d6e559b9fa1e813b2ef8
|
||||||
SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25
|
SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25
|
||||||
SwiftEntryKit: 61b5fa36f34a97dd8013e48a7345bc4c4720be9a
|
SwiftEntryKit: 61b5fa36f34a97dd8013e48a7345bc4c4720be9a
|
||||||
|
SwiftyRSA: 8c6dd1ea7db1b8dc4fb517a202f88bb1354bc2c6
|
||||||
ZLPhotoBrowser: 0563c2bfc7b247b65d023d646012f46cba94101b
|
ZLPhotoBrowser: 0563c2bfc7b247b65d023d646012f46cba94101b
|
||||||
|
|
||||||
PODFILE CHECKSUM: 54816ab62e42f5b8ee1aec46e52e7bbfd34873a6
|
PODFILE CHECKSUM: 238c7b02af4b658816837b53dba7a110c1cdd982
|
||||||
|
|
||||||
COCOAPODS: 1.11.3
|
COCOAPODS: 1.11.3
|
||||||
|
|||||||
14993
Pods/Pods.xcodeproj/project.pbxproj
generated
14993
Pods/Pods.xcodeproj/project.pbxproj
generated
File diff suppressed because it is too large
Load Diff
58
Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/SwiftyRSA.xcscheme
generated
Normal file
58
Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/SwiftyRSA.xcscheme
generated
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "1300"
|
||||||
|
version = "1.3">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "92A1C13902E7ACDA3ABB5BA1FEACC86C"
|
||||||
|
BuildableName = "libSwiftyRSA.a"
|
||||||
|
BlueprintName = "SwiftyRSA"
|
||||||
|
ReferencedContainer = "container:Pods.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
|
<Testables>
|
||||||
|
</Testables>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
@@ -214,6 +214,11 @@
|
|||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<key>SwiftyRSA.xcscheme</key>
|
||||||
|
<dict>
|
||||||
|
<key>isShown</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
<key>ZLPhotoBrowser.xcscheme</key>
|
<key>ZLPhotoBrowser.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
|
|||||||
21
Pods/SwiftyRSA/LICENSE
generated
Normal file
21
Pods/SwiftyRSA/LICENSE
generated
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015 Scoop Technologies, Inc.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
245
Pods/SwiftyRSA/README.md
generated
Normal file
245
Pods/SwiftyRSA/README.md
generated
Normal file
@@ -0,0 +1,245 @@
|
|||||||
|
SwiftyRSA
|
||||||
|
=========
|
||||||
|
|
||||||
|
**Maintainer(s):** [@ikeith](https://github.com/ikeith)
|
||||||
|
|
||||||
|
[](https://cocoapods.org/pods/SwiftyRSA)
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
[](https://circleci.com/gh/TakeScoop/SwiftyRSA)
|
||||||
|
|
||||||
|
**Public key RSA encryption in Swift.**
|
||||||
|
|
||||||
|
SwiftyRSA is used in the [Scoop](https://www.takescoop.com/) [iOS app](https://itunes.apple.com/us/app/scoop-easy-custom-carpooling/id997978145?mt=8) to encrypt driver license numbers before submitting them to Checkr through our API.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
### Swift 5.0+
|
||||||
|
|
||||||
|
SwiftyRSA uses Swift 5.0 and requires Xcode 10.2+.
|
||||||
|
|
||||||
|
With Cocoapods:
|
||||||
|
|
||||||
|
```
|
||||||
|
pod 'SwiftyRSA'
|
||||||
|
```
|
||||||
|
|
||||||
|
With Carthage:
|
||||||
|
|
||||||
|
```
|
||||||
|
github "TakeScoop/SwiftyRSA"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Objective-C
|
||||||
|
|
||||||
|
```
|
||||||
|
pod 'SwiftyRSA/ObjC'
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Quick Start
|
||||||
|
-----------
|
||||||
|
|
||||||
|
### Encrypt with a public key
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let publicKey = try PublicKey(pemNamed: "public")
|
||||||
|
let clear = try ClearMessage(string: "Clear Text", using: .utf8)
|
||||||
|
let encrypted = try clear.encrypted(with: publicKey, padding: .PKCS1)
|
||||||
|
|
||||||
|
// Then you can use:
|
||||||
|
let data = encrypted.data
|
||||||
|
let base64String = encrypted.base64String
|
||||||
|
```
|
||||||
|
|
||||||
|
### Decrypt with a private key
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let privateKey = try PrivateKey(pemNamed: "private")
|
||||||
|
let encrypted = try EncryptedMessage(base64Encoded: "AAA===")
|
||||||
|
let clear = try encrypted.decrypted(with: privateKey, padding: .PKCS1)
|
||||||
|
|
||||||
|
// Then you can use:
|
||||||
|
let data = clear.data
|
||||||
|
let base64String = clear.base64String
|
||||||
|
let string = clear.string(using: .utf8)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Advanced Usage
|
||||||
|
--------------
|
||||||
|
|
||||||
|
### Create a public/private key representation
|
||||||
|
|
||||||
|
#### With a DER file
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let publicKey = try PublicKey(derNamed: "public")
|
||||||
|
let privateKey = try PrivateKey(derNamed: "private")
|
||||||
|
```
|
||||||
|
|
||||||
|
#### With a PEM file
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let publicKey = try PublicKey(pemNamed: "public")
|
||||||
|
let privateKey = try PrivateKey(pemNamed: "private")
|
||||||
|
```
|
||||||
|
|
||||||
|
#### With a PEM string
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let publicKey = try PublicKey(pemEncoded: str)
|
||||||
|
let privateKey = try PrivateKey(pemEncoded: str)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### With a Base64 string
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let publicKey = try PublicKey(base64Encoded: base64String)
|
||||||
|
let privateKey = try PrivateKey(base64Encoded: base64String)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### With data
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let publicKey = try PublicKey(data: data)
|
||||||
|
let privateKey = try PrivateKey(data: data)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### With a SecKey
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let publicKey = try PublicKey(reference: secKey)
|
||||||
|
let privateKey = try PrivateKey(reference: secKey)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Encrypt with a public key
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let str = "Clear Text"
|
||||||
|
let clear = try ClearMessage(string: str, using: .utf8)
|
||||||
|
let encrypted = try clear.encrypted(with: publicKey, padding: .PKCS1)
|
||||||
|
|
||||||
|
let data = encrypted.data
|
||||||
|
let base64String = encrypted.base64Encoded
|
||||||
|
```
|
||||||
|
|
||||||
|
### Decrypt with a private key
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let encrypted = try EncryptedMessage(base64Encoded: base64String)
|
||||||
|
let clear = try encrypted.decrypted(with: privateKey, padding: .PKCS1)
|
||||||
|
|
||||||
|
let data = clear.data
|
||||||
|
let base64String = clear.base64Encoded
|
||||||
|
let string = try clear.string(using: .utf8)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Sign with a private key
|
||||||
|
|
||||||
|
SwiftyRSA can sign data with a private key. SwiftyRSA will calculate a SHA digest of the supplied `String`/`Data` and use this to generate the digital signature.
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let clear = try ClearMessage(string: "Clear Text", using: .utf8)
|
||||||
|
let signature = clear.signed(with: privateKey, digestType: .sha1)
|
||||||
|
|
||||||
|
let data = signature.data
|
||||||
|
let base64String = signature.base64String
|
||||||
|
```
|
||||||
|
|
||||||
|
### Verify with a public key
|
||||||
|
|
||||||
|
SwiftyRSA can verify digital signatures with a public key. SwiftyRSA will calculate a digest of the supplied `String`/`Data` and use this to verify the digital signature.
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let signature = try Signature(base64Encoded: "AAA===")
|
||||||
|
let isSuccessful = try clear.verify(with: publicKey, signature: signature, digestType: .sha1)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create a public/private RSA key pair
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let keyPair = SwiftyRSA.generateRSAKeyPair(sizeInBits: 2048)
|
||||||
|
let privateKey = keyPair.privateKey
|
||||||
|
let publicKey = keyPair.publicKey
|
||||||
|
```
|
||||||
|
|
||||||
|
### Export a key or access its content
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let pem = try key.pemString()
|
||||||
|
let base64 = try key.base64String()
|
||||||
|
let data = try key.data()
|
||||||
|
let reference = key.reference
|
||||||
|
let originalData = key.originalData
|
||||||
|
```
|
||||||
|
|
||||||
|
### Use X.509 certificate
|
||||||
|
SwiftyRSA supports X.509 certificate for public keys. SwiftyRSA can add the X.509 header to a headerless public key, or on the contrary strip it to get a key without a header.
|
||||||
|
#### Add an X.509 header to a public key
|
||||||
|
```swift
|
||||||
|
let publicKey = PublicKey(data: data)
|
||||||
|
let publicKeyData = try publicKey.data()
|
||||||
|
let publicKey_with_X509_header = try SwiftyRSA.prependX509KeyHeader(keyData: publicKeyData)
|
||||||
|
```
|
||||||
|
#### Strip the X.509 header from a public key
|
||||||
|
```swift
|
||||||
|
let publicKey_headerLess: Data = try SwiftyRSA.stripKeyHeader(keyData: publicKey_with_X509_header)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Warning** : Storing (with SwiftyRSA's methods) or creating a ```PublicKey``` instance will automatically strip the header from the key. For more info, see *Under the hood* above.
|
||||||
|
|
||||||
|
Create public and private RSA keys
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
Use `ssh-keygen` to generate a PEM public key and a PEM private key. SwiftyRSA also supports DER public keys.
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ssh-keygen -t rsa -f ~/mykey -N ''
|
||||||
|
$ cat ~/mykey > ~/private.pem
|
||||||
|
$ ssh-keygen -f ~/mykey.pub -e -m pem > ~/public.pem
|
||||||
|
```
|
||||||
|
|
||||||
|
Your keys are now in `~/public.pem` and `~/private.pem`. Don't forget to move `~/mykey` and `~/mykey.pub` to a secure place.
|
||||||
|
|
||||||
|
Under the hood
|
||||||
|
--------------
|
||||||
|
|
||||||
|
To enable using public/private RSA keys on iOS, SwiftyRSA uses a couple techniques like X.509 header stripping so that the keychain accepts them.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Click here for more details</summary>
|
||||||
|
|
||||||
|
When encrypting using a public key:
|
||||||
|
|
||||||
|
- If the key is in PEM format, get rid of its meta data and convert it to Data
|
||||||
|
- Strip the public key X.509 header, otherwise the keychain won't accept it
|
||||||
|
- Add the public key to the keychain, with a random tag
|
||||||
|
- Get a reference on the key using the key tag
|
||||||
|
- Use `SecKeyEncrypt` to encrypt a `ClearMessage` using the key reference and the message data.
|
||||||
|
- Store the resulting encrypted data to an `EncryptedMessage`
|
||||||
|
- When the key gets deallocated, delete the public key from the keychain using its tag
|
||||||
|
|
||||||
|
When decrypting using a private key:
|
||||||
|
|
||||||
|
- Get rid of PEM meta data and convert to Data
|
||||||
|
- Add the private key to the app keychain, with a random tag
|
||||||
|
- Get a reference on the key using the key tag
|
||||||
|
- Use `SecKeyDecrypt` to decrypt an `EncryptedMessage` using the key reference and the encrypted message data
|
||||||
|
- Store the resulting decrypted data to a `ClearMessage`
|
||||||
|
- Delete private key from keychain using tag
|
||||||
|
</details>
|
||||||
|
|
||||||
|
Inspired from
|
||||||
|
-------------
|
||||||
|
|
||||||
|
- <http://blog.flirble.org/2011/01/05/rsa-public-key-openssl-ios/>
|
||||||
|
- <https://github.com/lancy/RSADemo>
|
||||||
|
- <https://github.com/btnguyen2k/swift-rsautils>
|
||||||
|
|
||||||
|
License
|
||||||
|
-------
|
||||||
|
|
||||||
|
This project is copyrighted under the MIT license. Complete license can be found here: <https://github.com/TakeScoop/SwiftyRSA/blob/master/LICENSE>
|
||||||
220
Pods/SwiftyRSA/Source/Asn1Parser.swift
generated
Normal file
220
Pods/SwiftyRSA/Source/Asn1Parser.swift
generated
Normal file
@@ -0,0 +1,220 @@
|
|||||||
|
//
|
||||||
|
// Asn1Parser.swift
|
||||||
|
// SwiftyRSA
|
||||||
|
//
|
||||||
|
// Created by Lois Di Qual on 5/9/17.
|
||||||
|
// Copyright © 2017 Scoop. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
/// Simple data scanner that consumes bytes from a raw data and keeps an updated position.
|
||||||
|
private class Scanner {
|
||||||
|
|
||||||
|
enum ScannerError: Error {
|
||||||
|
case outOfBounds
|
||||||
|
}
|
||||||
|
|
||||||
|
let data: Data
|
||||||
|
var index: Int = 0
|
||||||
|
|
||||||
|
/// Returns whether there is no more data to consume
|
||||||
|
var isComplete: Bool {
|
||||||
|
return index >= data.count
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Creates a scanner with provided data
|
||||||
|
///
|
||||||
|
/// - Parameter data: Data to consume
|
||||||
|
init(data: Data) {
|
||||||
|
self.data = data
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Consumes data of provided length and returns it
|
||||||
|
///
|
||||||
|
/// - Parameter length: length of the data to consume
|
||||||
|
/// - Returns: data consumed
|
||||||
|
/// - Throws: ScannerError.outOfBounds error if asked to consume too many bytes
|
||||||
|
func consume(length: Int) throws -> Data {
|
||||||
|
|
||||||
|
guard length > 0 else {
|
||||||
|
return Data()
|
||||||
|
}
|
||||||
|
|
||||||
|
guard index + length <= data.count else {
|
||||||
|
throw ScannerError.outOfBounds
|
||||||
|
}
|
||||||
|
|
||||||
|
let subdata = data.subdata(in: index..<index + length)
|
||||||
|
index += length
|
||||||
|
return subdata
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Consumes a primitive, definite ASN1 length and returns its value.
|
||||||
|
///
|
||||||
|
/// See http://luca.ntop.org/Teaching/Appunti/asn1.html,
|
||||||
|
///
|
||||||
|
/// - Short form. One octet. Bit 8 has value "0" and bits 7-1 give the length.
|
||||||
|
/// - Long form. Two to 127 octets. Bit 8 of first octet has value "1" and
|
||||||
|
/// bits 7-1 give the number of additional length octets.
|
||||||
|
/// Second and following octets give the length, base 256, most significant digit first.
|
||||||
|
///
|
||||||
|
/// - Returns: Length that was consumed
|
||||||
|
/// - Throws: ScannerError.outOfBounds error if asked to consume too many bytes
|
||||||
|
func consumeLength() throws -> Int {
|
||||||
|
|
||||||
|
let lengthByte = try consume(length: 1).firstByte
|
||||||
|
|
||||||
|
// If the first byte's value is less than 0x80, it directly contains the length
|
||||||
|
// so we can return it
|
||||||
|
guard lengthByte >= 0x80 else {
|
||||||
|
return Int(lengthByte)
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the first byte's value is more than 0x80, it indicates how many following bytes
|
||||||
|
// will describe the length. For instance, 0x85 indicates that 0x85 - 0x80 = 0x05 = 5
|
||||||
|
// bytes will describe the length, so we need to read the 5 next bytes and get their integer
|
||||||
|
// value to determine the length.
|
||||||
|
let nextByteCount = lengthByte - 0x80
|
||||||
|
let length = try consume(length: Int(nextByteCount))
|
||||||
|
|
||||||
|
return length.integer
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private extension Data {
|
||||||
|
|
||||||
|
/// Returns the first byte of the current data
|
||||||
|
var firstByte: UInt8 {
|
||||||
|
var byte: UInt8 = 0
|
||||||
|
copyBytes(to: &byte, count: MemoryLayout<UInt8>.size)
|
||||||
|
return byte
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the integer value of the current data.
|
||||||
|
/// @warning: this only supports data up to 4 bytes, as we can only extract 32-bit integers.
|
||||||
|
var integer: Int {
|
||||||
|
|
||||||
|
guard count > 0 else {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
var int: UInt32 = 0
|
||||||
|
var offset: Int32 = Int32(count - 1)
|
||||||
|
forEach { byte in
|
||||||
|
let byte32 = UInt32(byte)
|
||||||
|
let shifted = byte32 << (UInt32(offset) * 8)
|
||||||
|
int = int | shifted
|
||||||
|
offset -= 1
|
||||||
|
}
|
||||||
|
|
||||||
|
return Int(int)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A simple ASN1 parser that will recursively iterate over a root node and return a Node tree.
|
||||||
|
/// The root node can be any of the supported nodes described in `Node`. If the parser encounters a sequence
|
||||||
|
/// it will recursively parse its children.
|
||||||
|
enum Asn1Parser {
|
||||||
|
|
||||||
|
/// An ASN1 node
|
||||||
|
enum Node {
|
||||||
|
case sequence(nodes: [Node])
|
||||||
|
case integer(data: Data)
|
||||||
|
case objectIdentifier(data: Data)
|
||||||
|
case null
|
||||||
|
case bitString(data: Data)
|
||||||
|
case octetString(data: Data)
|
||||||
|
}
|
||||||
|
|
||||||
|
enum ParserError: Error {
|
||||||
|
case noType
|
||||||
|
case invalidType(value: UInt8)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Parses ASN1 data and returns its root node.
|
||||||
|
///
|
||||||
|
/// - Parameter data: ASN1 data to parse
|
||||||
|
/// - Returns: Root ASN1 Node
|
||||||
|
/// - Throws: A ParserError if anything goes wrong, or if an unknown node was encountered
|
||||||
|
static func parse(data: Data) throws -> Node {
|
||||||
|
let scanner = Scanner(data: data)
|
||||||
|
let node = try parseNode(scanner: scanner)
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Parses an ASN1 given an existing scanne.
|
||||||
|
/// @warning: this will modify the state (ie: position) of the provided scanner.
|
||||||
|
///
|
||||||
|
/// - Parameter scanner: Scanner to use to consume the data
|
||||||
|
/// - Returns: Parsed node
|
||||||
|
/// - Throws: A ParserError if anything goes wrong, or if an unknown node was encountered
|
||||||
|
private static func parseNode(scanner: Scanner) throws -> Node {
|
||||||
|
|
||||||
|
let firstByte = try scanner.consume(length: 1).firstByte
|
||||||
|
|
||||||
|
// Sequence
|
||||||
|
if firstByte == 0x30 {
|
||||||
|
let length = try scanner.consumeLength()
|
||||||
|
let data = try scanner.consume(length: length)
|
||||||
|
let nodes = try parseSequence(data: data)
|
||||||
|
return .sequence(nodes: nodes)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Integer
|
||||||
|
if firstByte == 0x02 {
|
||||||
|
let length = try scanner.consumeLength()
|
||||||
|
let data = try scanner.consume(length: length)
|
||||||
|
return .integer(data: data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Object identifier
|
||||||
|
if firstByte == 0x06 {
|
||||||
|
let length = try scanner.consumeLength()
|
||||||
|
let data = try scanner.consume(length: length)
|
||||||
|
return .objectIdentifier(data: data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Null
|
||||||
|
if firstByte == 0x05 {
|
||||||
|
_ = try scanner.consume(length: 1)
|
||||||
|
return .null
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bit String
|
||||||
|
if firstByte == 0x03 {
|
||||||
|
let length = try scanner.consumeLength()
|
||||||
|
|
||||||
|
// There's an extra byte (0x00) after the bit string length in all the keys I've encountered.
|
||||||
|
// I couldn't find a specification that referenced this extra byte, but let's consume it and discard it.
|
||||||
|
_ = try scanner.consume(length: 1)
|
||||||
|
|
||||||
|
let data = try scanner.consume(length: length - 1)
|
||||||
|
return .bitString(data: data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Octet String
|
||||||
|
if firstByte == 0x04 {
|
||||||
|
let length = try scanner.consumeLength()
|
||||||
|
let data = try scanner.consume(length: length)
|
||||||
|
return .octetString(data: data)
|
||||||
|
}
|
||||||
|
|
||||||
|
throw ParserError.invalidType(value: firstByte)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Parses an ASN1 sequence and returns its child nodes
|
||||||
|
///
|
||||||
|
/// - Parameter data: ASN1 data
|
||||||
|
/// - Returns: A list of ASN1 nodes
|
||||||
|
/// - Throws: A ParserError if anything goes wrong, or if an unknown node was encountered
|
||||||
|
private static func parseSequence(data: Data) throws -> [Node] {
|
||||||
|
let scanner = Scanner(data: data)
|
||||||
|
var nodes: [Node] = []
|
||||||
|
while !scanner.isComplete {
|
||||||
|
let node = try parseNode(scanner: scanner)
|
||||||
|
nodes.append(node)
|
||||||
|
}
|
||||||
|
return nodes
|
||||||
|
}
|
||||||
|
}
|
||||||
180
Pods/SwiftyRSA/Source/ClearMessage.swift
generated
Normal file
180
Pods/SwiftyRSA/Source/ClearMessage.swift
generated
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
//
|
||||||
|
// ClearMessage.swift
|
||||||
|
// SwiftyRSA
|
||||||
|
//
|
||||||
|
// Created by Lois Di Qual on 5/18/17.
|
||||||
|
// Copyright © 2017 Scoop. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
public class ClearMessage: Message {
|
||||||
|
|
||||||
|
/// Data of the message
|
||||||
|
public let data: Data
|
||||||
|
|
||||||
|
/// Creates a clear message with data.
|
||||||
|
///
|
||||||
|
/// - Parameter data: Data of the clear message
|
||||||
|
public required init(data: Data) {
|
||||||
|
self.data = data
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Creates a clear message from a string, with the specified encoding.
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - string: String value of the clear message
|
||||||
|
/// - encoding: Encoding to use to generate the clear data
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
public convenience init(string: String, using encoding: String.Encoding) throws {
|
||||||
|
guard let data = string.data(using: encoding) else {
|
||||||
|
throw SwiftyRSAError.stringToDataConversionFailed
|
||||||
|
}
|
||||||
|
self.init(data: data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the string representation of the clear message using the specified
|
||||||
|
/// string encoding.
|
||||||
|
///
|
||||||
|
/// - Parameter encoding: Encoding to use during the string conversion
|
||||||
|
/// - Returns: String representation of the clear message
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
public func string(encoding: String.Encoding) throws -> String {
|
||||||
|
guard let str = String(data: data, encoding: encoding) else {
|
||||||
|
throw SwiftyRSAError.dataToStringConversionFailed
|
||||||
|
}
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Encrypts a clear message with a public key and returns an encrypted message.
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - key: Public key to encrypt the clear message with
|
||||||
|
/// - padding: Padding to use during the encryption
|
||||||
|
/// - Returns: Encrypted message
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
public func encrypted(with key: PublicKey, padding: Padding) throws -> EncryptedMessage {
|
||||||
|
|
||||||
|
let blockSize = SecKeyGetBlockSize(key.reference)
|
||||||
|
|
||||||
|
var maxChunkSize: Int
|
||||||
|
switch padding {
|
||||||
|
case []:
|
||||||
|
maxChunkSize = blockSize
|
||||||
|
case .OAEP:
|
||||||
|
maxChunkSize = blockSize - 42
|
||||||
|
default:
|
||||||
|
maxChunkSize = blockSize - 11
|
||||||
|
}
|
||||||
|
|
||||||
|
var decryptedDataAsArray = [UInt8](repeating: 0, count: data.count)
|
||||||
|
(data as NSData).getBytes(&decryptedDataAsArray, length: data.count)
|
||||||
|
|
||||||
|
var encryptedDataBytes = [UInt8](repeating: 0, count: 0)
|
||||||
|
var idx = 0
|
||||||
|
while idx < decryptedDataAsArray.count {
|
||||||
|
|
||||||
|
let idxEnd = min(idx + maxChunkSize, decryptedDataAsArray.count)
|
||||||
|
let chunkData = [UInt8](decryptedDataAsArray[idx..<idxEnd])
|
||||||
|
|
||||||
|
var encryptedDataBuffer = [UInt8](repeating: 0, count: blockSize)
|
||||||
|
var encryptedDataLength = blockSize
|
||||||
|
|
||||||
|
let status = SecKeyEncrypt(key.reference, padding, chunkData, chunkData.count, &encryptedDataBuffer, &encryptedDataLength)
|
||||||
|
|
||||||
|
guard status == noErr else {
|
||||||
|
throw SwiftyRSAError.chunkEncryptFailed(index: idx)
|
||||||
|
}
|
||||||
|
|
||||||
|
encryptedDataBytes += encryptedDataBuffer
|
||||||
|
|
||||||
|
idx += maxChunkSize
|
||||||
|
}
|
||||||
|
|
||||||
|
let encryptedData = Data(bytes: encryptedDataBytes, count: encryptedDataBytes.count)
|
||||||
|
return EncryptedMessage(data: encryptedData)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Signs a clear message using a private key.
|
||||||
|
/// The clear message will first be hashed using the specified digest type, then signed
|
||||||
|
/// using the provided private key.
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - key: Private key to sign the clear message with
|
||||||
|
/// - digestType: Digest
|
||||||
|
/// - Returns: Signature of the clear message after signing it with the specified digest type.
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
public func signed(with key: PrivateKey, digestType: Signature.DigestType) throws -> Signature {
|
||||||
|
|
||||||
|
let digest = self.digest(digestType: digestType)
|
||||||
|
let blockSize = SecKeyGetBlockSize(key.reference)
|
||||||
|
let maxChunkSize = blockSize - 11
|
||||||
|
|
||||||
|
guard digest.count <= maxChunkSize else {
|
||||||
|
throw SwiftyRSAError.invalidDigestSize(digestSize: digest.count, maxChunkSize: maxChunkSize)
|
||||||
|
}
|
||||||
|
|
||||||
|
var digestBytes = [UInt8](repeating: 0, count: digest.count)
|
||||||
|
(digest as NSData).getBytes(&digestBytes, length: digest.count)
|
||||||
|
|
||||||
|
var signatureBytes = [UInt8](repeating: 0, count: blockSize)
|
||||||
|
var signatureDataLength = blockSize
|
||||||
|
|
||||||
|
let status = SecKeyRawSign(key.reference, digestType.padding, digestBytes, digestBytes.count, &signatureBytes, &signatureDataLength)
|
||||||
|
|
||||||
|
guard status == noErr else {
|
||||||
|
throw SwiftyRSAError.signatureCreateFailed(status: status)
|
||||||
|
}
|
||||||
|
|
||||||
|
let signatureData = Data(bytes: signatureBytes, count: signatureBytes.count)
|
||||||
|
return Signature(data: signatureData)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Verifies the signature of a clear message.
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - key: Public key to verify the signature with
|
||||||
|
/// - signature: Signature to verify
|
||||||
|
/// - digestType: Digest type used for the signature
|
||||||
|
/// - Returns: Result of the verification
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
public func verify(with key: PublicKey, signature: Signature, digestType: Signature.DigestType) throws -> Bool {
|
||||||
|
|
||||||
|
let digest = self.digest(digestType: digestType)
|
||||||
|
var digestBytes = [UInt8](repeating: 0, count: digest.count)
|
||||||
|
(digest as NSData).getBytes(&digestBytes, length: digest.count)
|
||||||
|
|
||||||
|
var signatureBytes = [UInt8](repeating: 0, count: signature.data.count)
|
||||||
|
(signature.data as NSData).getBytes(&signatureBytes, length: signature.data.count)
|
||||||
|
|
||||||
|
let status = SecKeyRawVerify(key.reference, digestType.padding, digestBytes, digestBytes.count, signatureBytes, signatureBytes.count)
|
||||||
|
|
||||||
|
if status == errSecSuccess {
|
||||||
|
return true
|
||||||
|
} else if status == -9809 {
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
throw SwiftyRSAError.signatureVerifyFailed(status: status)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func digest(digestType: Signature.DigestType) -> Data {
|
||||||
|
|
||||||
|
let digest: Data
|
||||||
|
|
||||||
|
switch digestType {
|
||||||
|
case .sha1:
|
||||||
|
digest = (data as NSData).swiftyRSASHA1()
|
||||||
|
case .sha224:
|
||||||
|
digest = (data as NSData).swiftyRSASHA224()
|
||||||
|
case .sha256:
|
||||||
|
digest = (data as NSData).swiftyRSASHA256()
|
||||||
|
case .sha384:
|
||||||
|
digest = (data as NSData).swiftyRSASHA384()
|
||||||
|
case .sha512:
|
||||||
|
digest = (data as NSData).swiftyRSASHA512()
|
||||||
|
}
|
||||||
|
|
||||||
|
return digest
|
||||||
|
}
|
||||||
|
}
|
||||||
59
Pods/SwiftyRSA/Source/EncryptedMessage.swift
generated
Normal file
59
Pods/SwiftyRSA/Source/EncryptedMessage.swift
generated
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
//
|
||||||
|
// EncryptedMessage.swift
|
||||||
|
// SwiftyRSA
|
||||||
|
//
|
||||||
|
// Created by Lois Di Qual on 5/18/17.
|
||||||
|
// Copyright © 2017 Scoop. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
public class EncryptedMessage: Message {
|
||||||
|
|
||||||
|
/// Data of the message
|
||||||
|
public let data: Data
|
||||||
|
|
||||||
|
/// Creates an encrypted message with data.
|
||||||
|
///
|
||||||
|
/// - Parameter data: Data of the encrypted message.
|
||||||
|
public required init(data: Data) {
|
||||||
|
self.data = data
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Decrypts an encrypted message with a private key and returns a clear message.
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - key: Private key to decrypt the mssage with
|
||||||
|
/// - padding: Padding to use during the decryption
|
||||||
|
/// - Returns: Clear message
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
public func decrypted(with key: PrivateKey, padding: Padding) throws -> ClearMessage {
|
||||||
|
let blockSize = SecKeyGetBlockSize(key.reference)
|
||||||
|
|
||||||
|
var encryptedDataAsArray = [UInt8](repeating: 0, count: data.count)
|
||||||
|
(data as NSData).getBytes(&encryptedDataAsArray, length: data.count)
|
||||||
|
|
||||||
|
var decryptedDataBytes = [UInt8](repeating: 0, count: 0)
|
||||||
|
var idx = 0
|
||||||
|
while idx < encryptedDataAsArray.count {
|
||||||
|
|
||||||
|
let idxEnd = min(idx + blockSize, encryptedDataAsArray.count)
|
||||||
|
let chunkData = [UInt8](encryptedDataAsArray[idx..<idxEnd])
|
||||||
|
|
||||||
|
var decryptedDataBuffer = [UInt8](repeating: 0, count: blockSize)
|
||||||
|
var decryptedDataLength = blockSize
|
||||||
|
|
||||||
|
let status = SecKeyDecrypt(key.reference, padding, chunkData, idxEnd-idx, &decryptedDataBuffer, &decryptedDataLength)
|
||||||
|
guard status == noErr else {
|
||||||
|
throw SwiftyRSAError.chunkDecryptFailed(index: idx)
|
||||||
|
}
|
||||||
|
|
||||||
|
decryptedDataBytes += [UInt8](decryptedDataBuffer[0..<decryptedDataLength])
|
||||||
|
|
||||||
|
idx += blockSize
|
||||||
|
}
|
||||||
|
|
||||||
|
let decryptedData = Data(bytes: decryptedDataBytes, count: decryptedDataBytes.count)
|
||||||
|
return ClearMessage(data: decryptedData)
|
||||||
|
}
|
||||||
|
}
|
||||||
90
Pods/SwiftyRSA/Source/Key.swift
generated
Normal file
90
Pods/SwiftyRSA/Source/Key.swift
generated
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
//
|
||||||
|
// Key.swift
|
||||||
|
// SwiftyRSA
|
||||||
|
//
|
||||||
|
// Created by Loïs Di Qual on 9/19/16.
|
||||||
|
// Copyright © 2016 Scoop. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Security
|
||||||
|
|
||||||
|
public protocol Key: AnyObject {
|
||||||
|
|
||||||
|
var reference: SecKey { get }
|
||||||
|
var originalData: Data? { get }
|
||||||
|
|
||||||
|
init(data: Data) throws
|
||||||
|
init(reference: SecKey) throws
|
||||||
|
init(base64Encoded base64String: String) throws
|
||||||
|
init(pemEncoded pemString: String) throws
|
||||||
|
init(pemNamed pemName: String, in bundle: Bundle) throws
|
||||||
|
init(derNamed derName: String, in bundle: Bundle) throws
|
||||||
|
|
||||||
|
func pemString() throws -> String
|
||||||
|
func data() throws -> Data
|
||||||
|
func base64String() throws -> String
|
||||||
|
}
|
||||||
|
|
||||||
|
public extension Key {
|
||||||
|
|
||||||
|
/// Returns a Base64 representation of the public key.
|
||||||
|
///
|
||||||
|
/// - Returns: Data of the key, Base64-encoded
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
func base64String() throws -> String {
|
||||||
|
return try data().base64EncodedString()
|
||||||
|
}
|
||||||
|
|
||||||
|
func data() throws -> Data {
|
||||||
|
return try SwiftyRSA.data(forKeyReference: reference)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Creates a public key with a base64-encoded string.
|
||||||
|
///
|
||||||
|
/// - Parameter base64String: Base64-encoded public key data
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
init(base64Encoded base64String: String) throws {
|
||||||
|
guard let data = Data(base64Encoded: base64String, options: [.ignoreUnknownCharacters]) else {
|
||||||
|
throw SwiftyRSAError.invalidBase64String
|
||||||
|
}
|
||||||
|
try self.init(data: data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Creates a public key with a PEM string.
|
||||||
|
///
|
||||||
|
/// - Parameter pemString: PEM-encoded public key string
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
init(pemEncoded pemString: String) throws {
|
||||||
|
let base64String = try SwiftyRSA.base64String(pemEncoded: pemString)
|
||||||
|
try self.init(base64Encoded: base64String)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Creates a public key with a PEM file.
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - pemName: Name of the PEM file
|
||||||
|
/// - bundle: Bundle in which to look for the PEM file. Defaults to the main bundle.
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
init(pemNamed pemName: String, in bundle: Bundle = Bundle.main) throws {
|
||||||
|
guard let path = bundle.path(forResource: pemName, ofType: "pem") else {
|
||||||
|
throw SwiftyRSAError.pemFileNotFound(name: pemName)
|
||||||
|
}
|
||||||
|
let keyString = try String(contentsOf: URL(fileURLWithPath: path), encoding: .utf8)
|
||||||
|
try self.init(pemEncoded: keyString)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Creates a private key with a DER file.
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - derName: Name of the DER file
|
||||||
|
/// - bundle: Bundle in which to look for the DER file. Defaults to the main bundle.
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
init(derNamed derName: String, in bundle: Bundle = Bundle.main) throws {
|
||||||
|
guard let path = bundle.path(forResource: derName, ofType: "der") else {
|
||||||
|
throw SwiftyRSAError.derFileNotFound(name: derName)
|
||||||
|
}
|
||||||
|
let data = try Data(contentsOf: URL(fileURLWithPath: path))
|
||||||
|
try self.init(data: data)
|
||||||
|
}
|
||||||
|
}
|
||||||
35
Pods/SwiftyRSA/Source/Message.swift
generated
Normal file
35
Pods/SwiftyRSA/Source/Message.swift
generated
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
//
|
||||||
|
// Message.swift
|
||||||
|
// SwiftyRSA
|
||||||
|
//
|
||||||
|
// Created by Loïs Di Qual on 9/19/16.
|
||||||
|
// Copyright © 2016 Scoop. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
public protocol Message {
|
||||||
|
var data: Data { get }
|
||||||
|
var base64String: String { get }
|
||||||
|
init(data: Data)
|
||||||
|
init(base64Encoded base64String: String) throws
|
||||||
|
}
|
||||||
|
|
||||||
|
public extension Message {
|
||||||
|
|
||||||
|
/// Base64-encoded string of the message data
|
||||||
|
var base64String: String {
|
||||||
|
return data.base64EncodedString()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Creates an encrypted message with a base64-encoded string.
|
||||||
|
///
|
||||||
|
/// - Parameter base64String: Base64-encoded data of the encrypted message
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
init(base64Encoded base64String: String) throws {
|
||||||
|
guard let data = Data(base64Encoded: base64String) else {
|
||||||
|
throw SwiftyRSAError.invalidBase64String
|
||||||
|
}
|
||||||
|
self.init(data: data)
|
||||||
|
}
|
||||||
|
}
|
||||||
19
Pods/SwiftyRSA/Source/NSData+SHA.h
generated
Normal file
19
Pods/SwiftyRSA/Source/NSData+SHA.h
generated
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// NSData_SHA1.h
|
||||||
|
// SwiftyRSA
|
||||||
|
//
|
||||||
|
// Created by Paul Wilkinson on 19/04/2016.
|
||||||
|
// Copyright © 2016 Scoop. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
@interface NSData (NSData_SwiftyRSASHA)
|
||||||
|
|
||||||
|
- (nonnull NSData*) SwiftyRSASHA1;
|
||||||
|
- (nonnull NSData*) SwiftyRSASHA224;
|
||||||
|
- (nonnull NSData*) SwiftyRSASHA256;
|
||||||
|
- (nonnull NSData*) SwiftyRSASHA384;
|
||||||
|
- (nonnull NSData*) SwiftyRSASHA512;
|
||||||
|
|
||||||
|
@end
|
||||||
54
Pods/SwiftyRSA/Source/NSData+SHA.m
generated
Normal file
54
Pods/SwiftyRSA/Source/NSData+SHA.m
generated
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
//
|
||||||
|
// NSData_SHA1.h
|
||||||
|
// SwiftyRSA
|
||||||
|
//
|
||||||
|
// Created by Paul Wilkinson on 19/04/2016.
|
||||||
|
// Copyright © 2016 Scoop. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <CommonCrypto/CommonCrypto.h>
|
||||||
|
|
||||||
|
@implementation NSData (NSData_SwiftyRSASHA)
|
||||||
|
|
||||||
|
- (nonnull NSData*) SwiftyRSASHA1 {
|
||||||
|
unsigned int outputLength = CC_SHA1_DIGEST_LENGTH;
|
||||||
|
unsigned char output[outputLength];
|
||||||
|
|
||||||
|
CC_SHA1(self.bytes, (unsigned int) self.length, output);
|
||||||
|
return [NSData dataWithBytes:output length:outputLength];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (nonnull NSData*) SwiftyRSASHA224 {
|
||||||
|
unsigned int outputLength = CC_SHA224_DIGEST_LENGTH;
|
||||||
|
unsigned char output[outputLength];
|
||||||
|
|
||||||
|
CC_SHA224(self.bytes, (unsigned int) self.length, output);
|
||||||
|
return [NSData dataWithBytes:output length:outputLength];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (nonnull NSData*) SwiftyRSASHA256 {
|
||||||
|
unsigned int outputLength = CC_SHA256_DIGEST_LENGTH;
|
||||||
|
unsigned char output[outputLength];
|
||||||
|
|
||||||
|
CC_SHA256(self.bytes, (unsigned int) self.length, output);
|
||||||
|
return [NSData dataWithBytes:output length:outputLength];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (nonnull NSData*) SwiftyRSASHA384 {
|
||||||
|
unsigned int outputLength = CC_SHA384_DIGEST_LENGTH;
|
||||||
|
unsigned char output[outputLength];
|
||||||
|
|
||||||
|
CC_SHA384(self.bytes, (unsigned int) self.length, output);
|
||||||
|
return [NSData dataWithBytes:output length:outputLength];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (nonnull NSData*) SwiftyRSASHA512 {
|
||||||
|
unsigned int outputLength = CC_SHA512_DIGEST_LENGTH;
|
||||||
|
unsigned char output[outputLength];
|
||||||
|
|
||||||
|
CC_SHA512(self.bytes, (unsigned int) self.length, output);
|
||||||
|
return [NSData dataWithBytes:output length:outputLength];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
65
Pods/SwiftyRSA/Source/PrivateKey.swift
generated
Normal file
65
Pods/SwiftyRSA/Source/PrivateKey.swift
generated
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
//
|
||||||
|
// PrivateKey.swift
|
||||||
|
// SwiftyRSA
|
||||||
|
//
|
||||||
|
// Created by Lois Di Qual on 5/17/17.
|
||||||
|
// Copyright © 2017 Scoop. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
public class PrivateKey: Key {
|
||||||
|
|
||||||
|
/// Reference to the key within the keychain
|
||||||
|
public let reference: SecKey
|
||||||
|
|
||||||
|
/// Original data of the private key.
|
||||||
|
/// Note that it does not contain PEM headers and holds data as bytes, not as a base 64 string.
|
||||||
|
public let originalData: Data?
|
||||||
|
|
||||||
|
let tag: String?
|
||||||
|
|
||||||
|
/// Returns a PEM representation of the private key.
|
||||||
|
///
|
||||||
|
/// - Returns: Data of the key, PEM-encoded
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
public func pemString() throws -> String {
|
||||||
|
let data = try self.data()
|
||||||
|
let pem = SwiftyRSA.format(keyData: data, withPemType: "RSA PRIVATE KEY")
|
||||||
|
return pem
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Creates a private key with a keychain key reference.
|
||||||
|
/// This initializer will throw if the provided key reference is not a private RSA key.
|
||||||
|
///
|
||||||
|
/// - Parameter reference: Reference to the key within the keychain.
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
public required init(reference: SecKey) throws {
|
||||||
|
|
||||||
|
guard SwiftyRSA.isValidKeyReference(reference, forClass: kSecAttrKeyClassPrivate) else {
|
||||||
|
throw SwiftyRSAError.notAPrivateKey
|
||||||
|
}
|
||||||
|
|
||||||
|
self.reference = reference
|
||||||
|
self.tag = nil
|
||||||
|
self.originalData = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Creates a private key with a RSA public key data.
|
||||||
|
///
|
||||||
|
/// - Parameter data: Private key data
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
required public init(data: Data) throws {
|
||||||
|
self.originalData = data
|
||||||
|
let tag = UUID().uuidString
|
||||||
|
self.tag = tag
|
||||||
|
let dataWithoutHeader = try SwiftyRSA.stripKeyHeader(keyData: data)
|
||||||
|
reference = try SwiftyRSA.addKey(dataWithoutHeader, isPublic: false, tag: tag)
|
||||||
|
}
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
if let tag = tag {
|
||||||
|
SwiftyRSA.removeKey(tag: tag)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
116
Pods/SwiftyRSA/Source/PublicKey.swift
generated
Normal file
116
Pods/SwiftyRSA/Source/PublicKey.swift
generated
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
//
|
||||||
|
// PublicKey.swift
|
||||||
|
// SwiftyRSA
|
||||||
|
//
|
||||||
|
// Created by Lois Di Qual on 5/17/17.
|
||||||
|
// Copyright © 2017 Scoop. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
public class PublicKey: Key {
|
||||||
|
|
||||||
|
/// Reference to the key within the keychain
|
||||||
|
public let reference: SecKey
|
||||||
|
|
||||||
|
/// Data of the public key as provided when creating the key.
|
||||||
|
/// Note that if the key was created from a base64string / DER string / PEM file / DER file,
|
||||||
|
/// the data holds the actual bytes of the key, not any textual representation like PEM headers
|
||||||
|
/// or base64 characters.
|
||||||
|
public let originalData: Data?
|
||||||
|
|
||||||
|
let tag: String? // Only used on iOS 8/9
|
||||||
|
|
||||||
|
/// Returns a PEM representation of the public key.
|
||||||
|
///
|
||||||
|
/// - Returns: Data of the key, PEM-encoded
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
public func pemString() throws -> String {
|
||||||
|
let data = try self.data()
|
||||||
|
let pem = SwiftyRSA.format(keyData: data, withPemType: "RSA PUBLIC KEY")
|
||||||
|
return pem
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Creates a public key with a keychain key reference.
|
||||||
|
/// This initializer will throw if the provided key reference is not a public RSA key.
|
||||||
|
///
|
||||||
|
/// - Parameter reference: Reference to the key within the keychain.
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
public required init(reference: SecKey) throws {
|
||||||
|
|
||||||
|
guard SwiftyRSA.isValidKeyReference(reference, forClass: kSecAttrKeyClassPublic) else {
|
||||||
|
throw SwiftyRSAError.notAPublicKey
|
||||||
|
}
|
||||||
|
|
||||||
|
self.reference = reference
|
||||||
|
self.tag = nil
|
||||||
|
self.originalData = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Data of the public key as returned by the keychain.
|
||||||
|
/// This method throws if SwiftyRSA cannot extract data from the key.
|
||||||
|
///
|
||||||
|
/// - Returns: Data of the public key as returned by the keychain.
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
required public init(data: Data) throws {
|
||||||
|
|
||||||
|
let tag = UUID().uuidString
|
||||||
|
self.tag = tag
|
||||||
|
|
||||||
|
self.originalData = data
|
||||||
|
let dataWithoutHeader = try SwiftyRSA.stripKeyHeader(keyData: data)
|
||||||
|
|
||||||
|
reference = try SwiftyRSA.addKey(dataWithoutHeader, isPublic: true, tag: tag)
|
||||||
|
}
|
||||||
|
|
||||||
|
static let publicKeyRegex: NSRegularExpression? = {
|
||||||
|
let publicKeyRegex = "(-----BEGIN PUBLIC KEY-----.+?-----END PUBLIC KEY-----)"
|
||||||
|
return try? NSRegularExpression(pattern: publicKeyRegex, options: .dotMatchesLineSeparators)
|
||||||
|
}()
|
||||||
|
|
||||||
|
/// Takes an input string, scans for public key sections, and then returns a PublicKey for any valid keys found
|
||||||
|
/// - This method scans the file for public key armor - if no keys are found, an empty array is returned
|
||||||
|
/// - Each public key block found is "parsed" by `publicKeyFromPEMString()`
|
||||||
|
/// - should that method throw, the error is _swallowed_ and not rethrown
|
||||||
|
///
|
||||||
|
/// - parameter pemString: The string to use to parse out values
|
||||||
|
///
|
||||||
|
/// - returns: An array of `PublicKey` objects
|
||||||
|
public static func publicKeys(pemEncoded pemString: String) -> [PublicKey] {
|
||||||
|
|
||||||
|
// If our regexp isn't valid, or the input string is empty, we can't move forward…
|
||||||
|
guard let publicKeyRegexp = publicKeyRegex, pemString.count > 0 else {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
|
||||||
|
let all = NSRange(
|
||||||
|
location: 0,
|
||||||
|
length: pemString.count
|
||||||
|
)
|
||||||
|
|
||||||
|
let matches = publicKeyRegexp.matches(
|
||||||
|
in: pemString,
|
||||||
|
options: NSRegularExpression.MatchingOptions(rawValue: 0),
|
||||||
|
range: all
|
||||||
|
)
|
||||||
|
|
||||||
|
let keys = matches.compactMap { result -> PublicKey? in
|
||||||
|
|
||||||
|
let match = result.range(at: 1)
|
||||||
|
let start = pemString.index(pemString.startIndex, offsetBy: match.location)
|
||||||
|
let end = pemString.index(start, offsetBy: match.length)
|
||||||
|
|
||||||
|
let thisKey = pemString[start..<end]
|
||||||
|
|
||||||
|
return try? PublicKey(pemEncoded: String(thisKey))
|
||||||
|
}
|
||||||
|
|
||||||
|
return keys
|
||||||
|
}
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
if let tag = tag {
|
||||||
|
SwiftyRSA.removeKey(tag: tag)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
56
Pods/SwiftyRSA/Source/Signature.swift
generated
Normal file
56
Pods/SwiftyRSA/Source/Signature.swift
generated
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
//
|
||||||
|
// Signature.swift
|
||||||
|
// SwiftyRSA
|
||||||
|
//
|
||||||
|
// Created by Loïs Di Qual on 9/19/16.
|
||||||
|
// Copyright © 2016 Scoop. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
public class Signature {
|
||||||
|
|
||||||
|
public enum DigestType {
|
||||||
|
case sha1
|
||||||
|
case sha224
|
||||||
|
case sha256
|
||||||
|
case sha384
|
||||||
|
case sha512
|
||||||
|
|
||||||
|
var padding: Padding {
|
||||||
|
switch self {
|
||||||
|
case .sha1: return .PKCS1SHA1
|
||||||
|
case .sha224: return .PKCS1SHA224
|
||||||
|
case .sha256: return .PKCS1SHA256
|
||||||
|
case .sha384: return .PKCS1SHA384
|
||||||
|
case .sha512: return .PKCS1SHA512
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Data of the signature
|
||||||
|
public let data: Data
|
||||||
|
|
||||||
|
/// Creates a signature with data.
|
||||||
|
///
|
||||||
|
/// - Parameter data: Data of the signature
|
||||||
|
public init(data: Data) {
|
||||||
|
self.data = data
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Creates a signature with a base64-encoded string.
|
||||||
|
///
|
||||||
|
/// - Parameter base64String: Base64-encoded representation of the signature data.
|
||||||
|
/// - Throws: SwiftyRSAError
|
||||||
|
public convenience init(base64Encoded base64String: String) throws {
|
||||||
|
guard let data = Data(base64Encoded: base64String) else {
|
||||||
|
throw SwiftyRSAError.invalidBase64String
|
||||||
|
}
|
||||||
|
self.init(data: data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the base64 representation of the signature.
|
||||||
|
public var base64String: String {
|
||||||
|
return data.base64EncodedString()
|
||||||
|
}
|
||||||
|
}
|
||||||
280
Pods/SwiftyRSA/Source/SwiftyRSA+ObjC.swift
generated
Normal file
280
Pods/SwiftyRSA/Source/SwiftyRSA+ObjC.swift
generated
Normal file
@@ -0,0 +1,280 @@
|
|||||||
|
//
|
||||||
|
// SwiftyRSA+ObjC.swift
|
||||||
|
// SwiftyRSA
|
||||||
|
//
|
||||||
|
// Created by Lois Di Qual on 3/6/17.
|
||||||
|
// Copyright © 2017 Scoop. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
/// This files allows the ObjC runtime to access SwiftyRSA classes while keeping the swift code Swiftyish.
|
||||||
|
/// Things like protocol extensions or throwing and returning booleans are not well supported by ObjC, so instead
|
||||||
|
/// of giving access to the Swift classes directly, we're wrapping then their `_objc_*` counterpart.
|
||||||
|
/// They are exposed under the same name to the ObjC runtime, and all methods are present – they're just delegated
|
||||||
|
/// to the wrapped swift value.
|
||||||
|
|
||||||
|
private protocol ObjcBridgeable {
|
||||||
|
associatedtype SwiftType
|
||||||
|
var swiftValue: SwiftType { get }
|
||||||
|
init(swiftValue: SwiftType)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - PublicKey
|
||||||
|
|
||||||
|
@objc(PublicKey)
|
||||||
|
public class _objc_PublicKey: NSObject, Key, ObjcBridgeable { // swiftlint:disable:this type_name
|
||||||
|
|
||||||
|
fileprivate let swiftValue: PublicKey
|
||||||
|
|
||||||
|
@objc public var reference: SecKey {
|
||||||
|
return swiftValue.reference
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public var originalData: Data? {
|
||||||
|
return swiftValue.originalData
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public func pemString() throws -> String {
|
||||||
|
return try swiftValue.pemString()
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public func data() throws -> Data {
|
||||||
|
return try swiftValue.data()
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public func base64String() throws -> String {
|
||||||
|
return try swiftValue.base64String()
|
||||||
|
}
|
||||||
|
|
||||||
|
required public init(swiftValue: PublicKey) {
|
||||||
|
self.swiftValue = swiftValue
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc required public init(data: Data) throws {
|
||||||
|
self.swiftValue = try PublicKey(data: data)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public required init(reference: SecKey) throws {
|
||||||
|
self.swiftValue = try PublicKey(reference: reference)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public required init(base64Encoded base64String: String) throws {
|
||||||
|
self.swiftValue = try PublicKey(base64Encoded: base64String)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public required init(pemEncoded pemString: String) throws {
|
||||||
|
self.swiftValue = try PublicKey(pemEncoded: pemString)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public required init(pemNamed pemName: String, in bundle: Bundle) throws {
|
||||||
|
self.swiftValue = try PublicKey(pemNamed: pemName, in: bundle)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public required init(derNamed derName: String, in bundle: Bundle) throws {
|
||||||
|
self.swiftValue = try PublicKey(derNamed: derName, in: bundle)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public static func publicKeys(pemEncoded pemString: String) -> [_objc_PublicKey] {
|
||||||
|
return PublicKey.publicKeys(pemEncoded: pemString).map { _objc_PublicKey(swiftValue: $0) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - PrivateKey
|
||||||
|
|
||||||
|
@objc(PrivateKey)
|
||||||
|
public class _objc_PrivateKey: NSObject, Key, ObjcBridgeable { // swiftlint:disable:this type_name
|
||||||
|
|
||||||
|
fileprivate let swiftValue: PrivateKey
|
||||||
|
|
||||||
|
@objc public var reference: SecKey {
|
||||||
|
return swiftValue.reference
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public var originalData: Data? {
|
||||||
|
return swiftValue.originalData
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public func pemString() throws -> String {
|
||||||
|
return try swiftValue.pemString()
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public func data() throws -> Data {
|
||||||
|
return try swiftValue.data()
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public func base64String() throws -> String {
|
||||||
|
return try swiftValue.base64String()
|
||||||
|
}
|
||||||
|
|
||||||
|
public required init(swiftValue: PrivateKey) {
|
||||||
|
self.swiftValue = swiftValue
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public required init(data: Data) throws {
|
||||||
|
self.swiftValue = try PrivateKey(data: data)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public required init(reference: SecKey) throws {
|
||||||
|
self.swiftValue = try PrivateKey(reference: reference)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public required init(base64Encoded base64String: String) throws {
|
||||||
|
self.swiftValue = try PrivateKey(base64Encoded: base64String)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public required init(pemEncoded pemString: String) throws {
|
||||||
|
self.swiftValue = try PrivateKey(pemEncoded: pemString)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public required init(pemNamed pemName: String, in bundle: Bundle) throws {
|
||||||
|
self.swiftValue = try PrivateKey(pemNamed: pemName, in: bundle)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public required init(derNamed derName: String, in bundle: Bundle) throws {
|
||||||
|
self.swiftValue = try PrivateKey(derNamed: derName, in: bundle)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - VerificationResult
|
||||||
|
|
||||||
|
@objc(VerificationResult)
|
||||||
|
public class _objc_VerificationResult: NSObject { // swiftlint:disable:this type_name
|
||||||
|
@objc public let isSuccessful: Bool
|
||||||
|
init(isSuccessful: Bool) {
|
||||||
|
self.isSuccessful = isSuccessful
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - ClearMessage
|
||||||
|
|
||||||
|
@objc(ClearMessage)
|
||||||
|
public class _objc_ClearMessage: NSObject, Message, ObjcBridgeable { // swiftlint:disable:this type_name
|
||||||
|
|
||||||
|
fileprivate let swiftValue: ClearMessage
|
||||||
|
|
||||||
|
@objc public var base64String: String {
|
||||||
|
return swiftValue.base64String
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public var data: Data {
|
||||||
|
return swiftValue.data
|
||||||
|
}
|
||||||
|
|
||||||
|
public required init(swiftValue: ClearMessage) {
|
||||||
|
self.swiftValue = swiftValue
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public required init(data: Data) {
|
||||||
|
self.swiftValue = ClearMessage(data: data)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public required init(string: String, using rawEncoding: UInt) throws {
|
||||||
|
let encoding = String.Encoding(rawValue: rawEncoding)
|
||||||
|
self.swiftValue = try ClearMessage(string: string, using: encoding)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public required init(base64Encoded base64String: String) throws {
|
||||||
|
self.swiftValue = try ClearMessage(base64Encoded: base64String)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public func string(encoding rawEncoding: UInt) throws -> String {
|
||||||
|
let encoding = String.Encoding(rawValue: rawEncoding)
|
||||||
|
return try swiftValue.string(encoding: encoding)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public func encrypted(with key: _objc_PublicKey, padding: Padding) throws -> _objc_EncryptedMessage {
|
||||||
|
let encryptedMessage = try swiftValue.encrypted(with: key.swiftValue, padding: padding)
|
||||||
|
return _objc_EncryptedMessage(swiftValue: encryptedMessage)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public func signed(with key: _objc_PrivateKey, digestType: _objc_Signature.DigestType) throws -> _objc_Signature {
|
||||||
|
let signature = try swiftValue.signed(with: key.swiftValue, digestType: digestType.swiftValue)
|
||||||
|
return _objc_Signature(swiftValue: signature)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public func verify(with key: _objc_PublicKey, signature: _objc_Signature, digestType: _objc_Signature.DigestType) throws -> _objc_VerificationResult {
|
||||||
|
let isSuccessful = try swiftValue.verify(with: key.swiftValue, signature: signature.swiftValue, digestType: digestType.swiftValue)
|
||||||
|
return _objc_VerificationResult(isSuccessful: isSuccessful)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - EncryptedMessage
|
||||||
|
|
||||||
|
@objc(EncryptedMessage)
|
||||||
|
public class _objc_EncryptedMessage: NSObject, Message, ObjcBridgeable { // swiftlint:disable:this type_name
|
||||||
|
|
||||||
|
fileprivate let swiftValue: EncryptedMessage
|
||||||
|
|
||||||
|
@objc public var base64String: String {
|
||||||
|
return swiftValue.base64String
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public var data: Data {
|
||||||
|
return swiftValue.data
|
||||||
|
}
|
||||||
|
|
||||||
|
public required init(swiftValue: EncryptedMessage) {
|
||||||
|
self.swiftValue = swiftValue
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public required init(data: Data) {
|
||||||
|
self.swiftValue = EncryptedMessage(data: data)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public required init(base64Encoded base64String: String) throws {
|
||||||
|
self.swiftValue = try EncryptedMessage(base64Encoded: base64String)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public func decrypted(with key: _objc_PrivateKey, padding: Padding) throws -> _objc_ClearMessage {
|
||||||
|
let clearMessage = try swiftValue.decrypted(with: key.swiftValue, padding: padding)
|
||||||
|
return _objc_ClearMessage(swiftValue: clearMessage)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Signature
|
||||||
|
|
||||||
|
@objc(Signature)
|
||||||
|
public class _objc_Signature: NSObject, ObjcBridgeable { // swiftlint:disable:this type_name
|
||||||
|
|
||||||
|
@objc
|
||||||
|
public enum DigestType: Int {
|
||||||
|
case sha1
|
||||||
|
case sha224
|
||||||
|
case sha256
|
||||||
|
case sha384
|
||||||
|
case sha512
|
||||||
|
|
||||||
|
fileprivate var swiftValue: Signature.DigestType {
|
||||||
|
switch self {
|
||||||
|
case .sha1: return .sha1
|
||||||
|
case .sha224: return .sha224
|
||||||
|
case .sha256: return .sha256
|
||||||
|
case .sha384: return .sha384
|
||||||
|
case .sha512: return .sha512
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate let swiftValue: Signature
|
||||||
|
|
||||||
|
@objc public var base64String: String {
|
||||||
|
return swiftValue.base64String
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public var data: Data {
|
||||||
|
return swiftValue.data
|
||||||
|
}
|
||||||
|
|
||||||
|
public required init(swiftValue: Signature) {
|
||||||
|
self.swiftValue = swiftValue
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public init(data: Data) {
|
||||||
|
self.swiftValue = Signature(data: data)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc public required init(base64Encoded base64String: String) throws {
|
||||||
|
self.swiftValue = try Signature(base64Encoded: base64String)
|
||||||
|
}
|
||||||
|
}
|
||||||
19
Pods/SwiftyRSA/Source/SwiftyRSA.h
generated
Normal file
19
Pods/SwiftyRSA/Source/SwiftyRSA.h
generated
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// SwiftyRSA.h
|
||||||
|
// SwiftyRSA
|
||||||
|
//
|
||||||
|
// Created by Loïs Di Qual on 7/2/15.
|
||||||
|
// Copyright (c) 2015 Scoop. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
@import Foundation;
|
||||||
|
|
||||||
|
//! Project version number for SwiftyRSA.
|
||||||
|
FOUNDATION_EXPORT double SwiftyRSAVersionNumber;
|
||||||
|
|
||||||
|
//! Project version string for SwiftyRSA.
|
||||||
|
FOUNDATION_EXPORT const unsigned char SwiftyRSAVersionString[];
|
||||||
|
|
||||||
|
// In this header, you should import all the public headers of your framework using statements like #import <SwiftyRSA/PublicHeader.h>
|
||||||
|
|
||||||
|
#import "NSData+SHA.h"
|
||||||
349
Pods/SwiftyRSA/Source/SwiftyRSA.swift
generated
Normal file
349
Pods/SwiftyRSA/Source/SwiftyRSA.swift
generated
Normal file
@@ -0,0 +1,349 @@
|
|||||||
|
//
|
||||||
|
// SwiftyRSA.swift
|
||||||
|
// SwiftyRSA
|
||||||
|
//
|
||||||
|
// Created by Loïs Di Qual on 7/2/15.
|
||||||
|
//
|
||||||
|
// Copyright (c) 2015 Scoop Technologies, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Security
|
||||||
|
|
||||||
|
public typealias Padding = SecPadding
|
||||||
|
|
||||||
|
public enum SwiftyRSA {
|
||||||
|
|
||||||
|
static func base64String(pemEncoded pemString: String) throws -> String {
|
||||||
|
let lines = pemString.components(separatedBy: "\n").filter { line in
|
||||||
|
return !line.hasPrefix("-----BEGIN") && !line.hasPrefix("-----END")
|
||||||
|
}
|
||||||
|
|
||||||
|
guard lines.count != 0 else {
|
||||||
|
throw SwiftyRSAError.pemDoesNotContainKey
|
||||||
|
}
|
||||||
|
|
||||||
|
return lines.joined(separator: "")
|
||||||
|
}
|
||||||
|
|
||||||
|
static func isValidKeyReference(_ reference: SecKey, forClass requiredClass: CFString) -> Bool {
|
||||||
|
|
||||||
|
guard #available(iOS 10.0, *), #available(watchOS 3.0, *), #available(tvOS 10.0, *) else {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
let attributes = SecKeyCopyAttributes(reference) as? [CFString: Any]
|
||||||
|
guard let keyType = attributes?[kSecAttrKeyType] as? String, let keyClass = attributes?[kSecAttrKeyClass] as? String else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
let isRSA = keyType == (kSecAttrKeyTypeRSA as String)
|
||||||
|
let isValidClass = keyClass == (requiredClass as String)
|
||||||
|
return isRSA && isValidClass
|
||||||
|
}
|
||||||
|
|
||||||
|
static func format(keyData: Data, withPemType pemType: String) -> String {
|
||||||
|
|
||||||
|
func split(_ str: String, byChunksOfLength length: Int) -> [String] {
|
||||||
|
return stride(from: 0, to: str.count, by: length).map { index -> String in
|
||||||
|
let startIndex = str.index(str.startIndex, offsetBy: index)
|
||||||
|
let endIndex = str.index(startIndex, offsetBy: length, limitedBy: str.endIndex) ?? str.endIndex
|
||||||
|
return String(str[startIndex..<endIndex])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Line length is typically 64 characters, except the last line.
|
||||||
|
// See https://tools.ietf.org/html/rfc7468#page-6 (64base64char)
|
||||||
|
// See https://tools.ietf.org/html/rfc7468#page-11 (example)
|
||||||
|
let chunks = split(keyData.base64EncodedString(), byChunksOfLength: 64)
|
||||||
|
|
||||||
|
let pem = [
|
||||||
|
"-----BEGIN \(pemType)-----",
|
||||||
|
chunks.joined(separator: "\n"),
|
||||||
|
"-----END \(pemType)-----"
|
||||||
|
]
|
||||||
|
|
||||||
|
return pem.joined(separator: "\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
static func data(forKeyReference reference: SecKey) throws -> Data {
|
||||||
|
|
||||||
|
// On iOS+, we can use `SecKeyCopyExternalRepresentation` directly
|
||||||
|
if #available(iOS 10.0, *), #available(watchOS 3.0, *), #available(tvOS 10.0, *) {
|
||||||
|
|
||||||
|
var error: Unmanaged<CFError>?
|
||||||
|
let data = SecKeyCopyExternalRepresentation(reference, &error)
|
||||||
|
guard let unwrappedData = data as Data? else {
|
||||||
|
throw SwiftyRSAError.keyRepresentationFailed(error: error?.takeRetainedValue())
|
||||||
|
}
|
||||||
|
return unwrappedData
|
||||||
|
|
||||||
|
// On iOS 8/9, we need to add the key again to the keychain with a temporary tag, grab the data,
|
||||||
|
// and delete the key again.
|
||||||
|
} else {
|
||||||
|
|
||||||
|
let temporaryTag = UUID().uuidString
|
||||||
|
let addParams: [CFString: Any] = [
|
||||||
|
kSecValueRef: reference,
|
||||||
|
kSecReturnData: true,
|
||||||
|
kSecClass: kSecClassKey,
|
||||||
|
kSecAttrApplicationTag: temporaryTag
|
||||||
|
]
|
||||||
|
|
||||||
|
var data: AnyObject?
|
||||||
|
let addStatus = SecItemAdd(addParams as CFDictionary, &data)
|
||||||
|
guard let unwrappedData = data as? Data else {
|
||||||
|
throw SwiftyRSAError.keyAddFailed(status: addStatus)
|
||||||
|
}
|
||||||
|
|
||||||
|
let deleteParams: [CFString: Any] = [
|
||||||
|
kSecClass: kSecClassKey,
|
||||||
|
kSecAttrApplicationTag: temporaryTag
|
||||||
|
]
|
||||||
|
|
||||||
|
_ = SecItemDelete(deleteParams as CFDictionary)
|
||||||
|
|
||||||
|
return unwrappedData
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Will generate a new private and public key
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - size: Indicates the total number of bits in this cryptographic key
|
||||||
|
/// - Returns: A touple of a private and public key
|
||||||
|
/// - Throws: Throws and error if the tag cant be parsed or if keygeneration fails
|
||||||
|
@available(iOS 10.0, watchOS 3.0, tvOS 10.0, *)
|
||||||
|
public static func generateRSAKeyPair(sizeInBits size: Int) throws -> (privateKey: PrivateKey, publicKey: PublicKey) {
|
||||||
|
return try generateRSAKeyPair(sizeInBits: size, applyUnitTestWorkaround: false)
|
||||||
|
}
|
||||||
|
|
||||||
|
@available(iOS 10.0, watchOS 3.0, tvOS 10.0, *)
|
||||||
|
static func generateRSAKeyPair(sizeInBits size: Int, applyUnitTestWorkaround: Bool = false) throws -> (privateKey: PrivateKey, publicKey: PublicKey) {
|
||||||
|
|
||||||
|
guard let tagData = UUID().uuidString.data(using: .utf8) else {
|
||||||
|
throw SwiftyRSAError.stringToDataConversionFailed
|
||||||
|
}
|
||||||
|
|
||||||
|
// @hack Don't store permanently when running unit tests, otherwise we'll get a key creation error (NSOSStatusErrorDomain -50)
|
||||||
|
// @see http://www.openradar.me/36809637
|
||||||
|
// @see https://stackoverflow.com/q/48414685/646960
|
||||||
|
let isPermanent = applyUnitTestWorkaround ? false : true
|
||||||
|
|
||||||
|
let attributes: [CFString: Any] = [
|
||||||
|
kSecAttrKeyType: kSecAttrKeyTypeRSA,
|
||||||
|
kSecAttrKeySizeInBits: size,
|
||||||
|
kSecPrivateKeyAttrs: [
|
||||||
|
kSecAttrIsPermanent: isPermanent,
|
||||||
|
kSecAttrApplicationTag: tagData
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
var error: Unmanaged<CFError>?
|
||||||
|
guard let privKey = SecKeyCreateRandomKey(attributes as CFDictionary, &error),
|
||||||
|
let pubKey = SecKeyCopyPublicKey(privKey) else {
|
||||||
|
throw SwiftyRSAError.keyGenerationFailed(error: error?.takeRetainedValue())
|
||||||
|
}
|
||||||
|
let privateKey = try PrivateKey(reference: privKey)
|
||||||
|
let publicKey = try PublicKey(reference: pubKey)
|
||||||
|
|
||||||
|
return (privateKey: privateKey, publicKey: publicKey)
|
||||||
|
}
|
||||||
|
|
||||||
|
static func addKey(_ keyData: Data, isPublic: Bool, tag: String) throws -> SecKey {
|
||||||
|
|
||||||
|
let keyData = keyData
|
||||||
|
|
||||||
|
guard let tagData = tag.data(using: .utf8) else {
|
||||||
|
throw SwiftyRSAError.tagEncodingFailed
|
||||||
|
}
|
||||||
|
|
||||||
|
let keyClass = isPublic ? kSecAttrKeyClassPublic : kSecAttrKeyClassPrivate
|
||||||
|
|
||||||
|
// On iOS 10+, we can use SecKeyCreateWithData without going through the keychain
|
||||||
|
if #available(iOS 10.0, *), #available(watchOS 3.0, *), #available(tvOS 10.0, *) {
|
||||||
|
|
||||||
|
let sizeInBits = keyData.count * 8
|
||||||
|
let keyDict: [CFString: Any] = [
|
||||||
|
kSecAttrKeyType: kSecAttrKeyTypeRSA,
|
||||||
|
kSecAttrKeyClass: keyClass,
|
||||||
|
kSecAttrKeySizeInBits: NSNumber(value: sizeInBits),
|
||||||
|
kSecReturnPersistentRef: true
|
||||||
|
]
|
||||||
|
|
||||||
|
var error: Unmanaged<CFError>?
|
||||||
|
guard let key = SecKeyCreateWithData(keyData as CFData, keyDict as CFDictionary, &error) else {
|
||||||
|
throw SwiftyRSAError.keyCreateFailed(error: error?.takeRetainedValue())
|
||||||
|
}
|
||||||
|
return key
|
||||||
|
|
||||||
|
// On iOS 9 and earlier, add a persistent version of the key to the system keychain
|
||||||
|
} else {
|
||||||
|
|
||||||
|
let persistKey = UnsafeMutablePointer<AnyObject?>(mutating: nil)
|
||||||
|
|
||||||
|
let keyAddDict: [CFString: Any] = [
|
||||||
|
kSecClass: kSecClassKey,
|
||||||
|
kSecAttrApplicationTag: tagData,
|
||||||
|
kSecAttrKeyType: kSecAttrKeyTypeRSA,
|
||||||
|
kSecValueData: keyData,
|
||||||
|
kSecAttrKeyClass: keyClass,
|
||||||
|
kSecReturnPersistentRef: true,
|
||||||
|
kSecAttrAccessible: kSecAttrAccessibleAfterFirstUnlock
|
||||||
|
]
|
||||||
|
|
||||||
|
let addStatus = SecItemAdd(keyAddDict as CFDictionary, persistKey)
|
||||||
|
guard addStatus == errSecSuccess || addStatus == errSecDuplicateItem else {
|
||||||
|
throw SwiftyRSAError.keyAddFailed(status: addStatus)
|
||||||
|
}
|
||||||
|
|
||||||
|
let keyCopyDict: [CFString: Any] = [
|
||||||
|
kSecClass: kSecClassKey,
|
||||||
|
kSecAttrApplicationTag: tagData,
|
||||||
|
kSecAttrKeyType: kSecAttrKeyTypeRSA,
|
||||||
|
kSecAttrKeyClass: keyClass,
|
||||||
|
kSecAttrAccessible: kSecAttrAccessibleAfterFirstUnlock,
|
||||||
|
kSecReturnRef: true,
|
||||||
|
]
|
||||||
|
|
||||||
|
// Now fetch the SecKeyRef version of the key
|
||||||
|
var keyRef: AnyObject?
|
||||||
|
let copyStatus = SecItemCopyMatching(keyCopyDict as CFDictionary, &keyRef)
|
||||||
|
|
||||||
|
guard let unwrappedKeyRef = keyRef else {
|
||||||
|
throw SwiftyRSAError.keyCopyFailed(status: copyStatus)
|
||||||
|
}
|
||||||
|
|
||||||
|
return unwrappedKeyRef as! SecKey // swiftlint:disable:this force_cast
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
This method strips the x509 header from a provided ASN.1 DER key.
|
||||||
|
If the key doesn't contain a header, the DER data is returned as is.
|
||||||
|
|
||||||
|
Supported formats are:
|
||||||
|
|
||||||
|
Headerless:
|
||||||
|
SEQUENCE
|
||||||
|
INTEGER (1024 or 2048 bit) -- modulo
|
||||||
|
INTEGER -- public exponent
|
||||||
|
|
||||||
|
With x509 header:
|
||||||
|
SEQUENCE
|
||||||
|
SEQUENCE
|
||||||
|
OBJECT IDENTIFIER 1.2.840.113549.1.1.1
|
||||||
|
NULL
|
||||||
|
BIT STRING
|
||||||
|
SEQUENCE
|
||||||
|
INTEGER (1024 or 2048 bit) -- modulo
|
||||||
|
INTEGER -- public exponent
|
||||||
|
|
||||||
|
Example of headerless key:
|
||||||
|
https://lapo.it/asn1js/#3082010A0282010100C1A0DFA367FBC2A5FD6ED5A071E02A4B0617E19C6B5AD11BB61192E78D212F10A7620084A3CED660894134D4E475BAD7786FA1D40878683FD1B7A1AD9C0542B7A666457A270159DAC40CE25B2EAE7CCD807D31AE725CA394F90FBB5C5BA500545B99C545A9FE08EFF00A5F23457633E1DB84ED5E908EF748A90F8DFCCAFF319CB0334705EA012AF15AA090D17A9330159C9AFC9275C610BB9B7C61317876DC7386C723885C100F774C19830F475AD1E9A9925F9CA9A69CE0181A214DF2EB75FD13E6A546B8C8ED699E33A8521242B7E42711066AEC22D25DD45D56F94D3170D6F2C25164D2DACED31C73963BA885ADCB706F40866B8266433ED5161DC50E4B3B0203010001
|
||||||
|
|
||||||
|
Example of key with X509 header (notice the additional ASN.1 sequence):
|
||||||
|
https://lapo.it/asn1js/#30819F300D06092A864886F70D010101050003818D0030818902818100D0674615A252ED3D75D2A3073A0A8A445F3188FD3BEB8BA8584F7299E391BDEC3427F287327414174997D147DD8CA62647427D73C9DA5504E0A3EED5274A1D50A1237D688486FADB8B82061675ABFA5E55B624095DB8790C6DBCAE83D6A8588C9A6635D7CF257ED1EDE18F04217D37908FD0CBB86B2C58D5F762E6207FF7B92D0203010001
|
||||||
|
*/
|
||||||
|
static func stripKeyHeader(keyData: Data) throws -> Data {
|
||||||
|
|
||||||
|
let node: Asn1Parser.Node
|
||||||
|
do {
|
||||||
|
node = try Asn1Parser.parse(data: keyData)
|
||||||
|
} catch {
|
||||||
|
throw SwiftyRSAError.asn1ParsingFailed
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure the raw data is an ASN1 sequence
|
||||||
|
guard case .sequence(let nodes) = node else {
|
||||||
|
throw SwiftyRSAError.invalidAsn1RootNode
|
||||||
|
}
|
||||||
|
|
||||||
|
// Detect whether the sequence only has integers, in which case it's a headerless key
|
||||||
|
let onlyHasIntegers = nodes.filter { node -> Bool in
|
||||||
|
if case .integer = node {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}.isEmpty
|
||||||
|
|
||||||
|
// Headerless key
|
||||||
|
if onlyHasIntegers {
|
||||||
|
return keyData
|
||||||
|
}
|
||||||
|
|
||||||
|
// If last element of the sequence is a bit string, return its data
|
||||||
|
if let last = nodes.last, case .bitString(let data) = last {
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
|
// If last element of the sequence is an octet string, return its data
|
||||||
|
if let last = nodes.last, case .octetString(let data) = last {
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unable to extract bit/octet string or raw integer sequence
|
||||||
|
throw SwiftyRSAError.invalidAsn1Structure
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
This method prepend the x509 header to the given PublicKey data.
|
||||||
|
If the key already contain a x509 header, the given data is returned as is.
|
||||||
|
It letterally does the opposite of the previous method :
|
||||||
|
From a given headerless key :
|
||||||
|
SEQUENCE
|
||||||
|
INTEGER (1024 or 2048 bit) -- modulo
|
||||||
|
INTEGER -- public exponent
|
||||||
|
the key is returned following the X509 header :
|
||||||
|
SEQUENCE
|
||||||
|
SEQUENCE
|
||||||
|
OBJECT IDENTIFIER 1.2.840.113549.1.1.1
|
||||||
|
NULL
|
||||||
|
BIT STRING
|
||||||
|
SEQUENCE
|
||||||
|
INTEGER (1024 or 2048 bit) -- modulo
|
||||||
|
INTEGER -- public exponent
|
||||||
|
*/
|
||||||
|
|
||||||
|
static func prependX509KeyHeader(keyData: Data) throws -> Data {
|
||||||
|
if try keyData.isAnHeaderlessKey() {
|
||||||
|
let x509certificate: Data = keyData.prependx509Header()
|
||||||
|
return x509certificate
|
||||||
|
} else if try keyData.hasX509Header() {
|
||||||
|
return keyData
|
||||||
|
} else { // invalideHeader
|
||||||
|
throw SwiftyRSAError.x509CertificateFailed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static func removeKey(tag: String) {
|
||||||
|
|
||||||
|
guard let tagData = tag.data(using: .utf8) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let keyRemoveDict: [CFString: Any] = [
|
||||||
|
kSecClass: kSecClassKey,
|
||||||
|
kSecAttrKeyType: kSecAttrKeyTypeRSA,
|
||||||
|
kSecAttrApplicationTag: tagData,
|
||||||
|
]
|
||||||
|
|
||||||
|
SecItemDelete(keyRemoveDict as CFDictionary)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !swift(>=4.1)
|
||||||
|
extension Array {
|
||||||
|
func compactMap<ElementOfResult>(_ transform: (Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult] {
|
||||||
|
return try self.flatMap(transform)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !swift(>=4.0)
|
||||||
|
extension NSTextCheckingResult {
|
||||||
|
func range(at idx: Int) -> NSRange {
|
||||||
|
return self.rangeAt(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
88
Pods/SwiftyRSA/Source/SwiftyRSAError.swift
generated
Normal file
88
Pods/SwiftyRSA/Source/SwiftyRSAError.swift
generated
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
//
|
||||||
|
// SwiftyRSAError.swift
|
||||||
|
// SwiftyRSA
|
||||||
|
//
|
||||||
|
// Created by Lois Di Qual on 5/15/17.
|
||||||
|
// Contributions by Stchepinsky Nathan on 24/06/2021
|
||||||
|
// Copyright © 2017 Scoop. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
public enum SwiftyRSAError: Error {
|
||||||
|
|
||||||
|
case pemDoesNotContainKey
|
||||||
|
case keyRepresentationFailed(error: CFError?)
|
||||||
|
case keyGenerationFailed(error: CFError?)
|
||||||
|
case keyCreateFailed(error: CFError?)
|
||||||
|
case keyAddFailed(status: OSStatus)
|
||||||
|
case keyCopyFailed(status: OSStatus)
|
||||||
|
case tagEncodingFailed
|
||||||
|
case asn1ParsingFailed
|
||||||
|
case invalidAsn1RootNode
|
||||||
|
case invalidAsn1Structure
|
||||||
|
case invalidBase64String
|
||||||
|
case chunkDecryptFailed(index: Int)
|
||||||
|
case chunkEncryptFailed(index: Int)
|
||||||
|
case stringToDataConversionFailed
|
||||||
|
case dataToStringConversionFailed
|
||||||
|
case invalidDigestSize(digestSize: Int, maxChunkSize: Int)
|
||||||
|
case signatureCreateFailed(status: OSStatus)
|
||||||
|
case signatureVerifyFailed(status: OSStatus)
|
||||||
|
case pemFileNotFound(name: String)
|
||||||
|
case derFileNotFound(name: String)
|
||||||
|
case notAPublicKey
|
||||||
|
case notAPrivateKey
|
||||||
|
case x509CertificateFailed
|
||||||
|
|
||||||
|
var localizedDescription: String {
|
||||||
|
switch self {
|
||||||
|
case .pemDoesNotContainKey:
|
||||||
|
return "Couldn't get data from PEM key: no data available after stripping headers"
|
||||||
|
case .keyRepresentationFailed(let error):
|
||||||
|
return "Couldn't retrieve key data from the keychain: CFError \(String(describing: error))"
|
||||||
|
case .keyGenerationFailed(let error):
|
||||||
|
return "Couldn't generate key pair: CFError: \(String(describing: error))"
|
||||||
|
case .keyCreateFailed(let error):
|
||||||
|
return "Couldn't create key reference from key data: CFError \(String(describing: error))"
|
||||||
|
case .keyAddFailed(let status):
|
||||||
|
return "Couldn't retrieve key data from the keychain: OSStatus \(status)"
|
||||||
|
case .keyCopyFailed(let status):
|
||||||
|
return "Couldn't copy and retrieve key reference from the keychain: OSStatus \(status)"
|
||||||
|
case .tagEncodingFailed:
|
||||||
|
return "Couldn't create tag data for key"
|
||||||
|
case .asn1ParsingFailed:
|
||||||
|
return "Couldn't parse the ASN1 key data. Please file a bug at https://goo.gl/y67MW6"
|
||||||
|
case .invalidAsn1RootNode:
|
||||||
|
return "Couldn't parse the provided key because its root ASN1 node is not a sequence. The key is probably corrupt"
|
||||||
|
case .invalidAsn1Structure:
|
||||||
|
return "Couldn't parse the provided key because it has an unexpected ASN1 structure"
|
||||||
|
case .invalidBase64String:
|
||||||
|
return "The provided string is not a valid Base 64 string"
|
||||||
|
case .chunkDecryptFailed(let index):
|
||||||
|
return "Couldn't decrypt chunk at index \(index)"
|
||||||
|
case .chunkEncryptFailed(let index):
|
||||||
|
return "Couldn't encrypt chunk at index \(index)"
|
||||||
|
case .stringToDataConversionFailed:
|
||||||
|
return "Couldn't convert string to data using specified encoding"
|
||||||
|
case .dataToStringConversionFailed:
|
||||||
|
return "Couldn't convert data to string representation"
|
||||||
|
case .invalidDigestSize(let digestSize, let maxChunkSize):
|
||||||
|
return "Provided digest type produces a size (\(digestSize)) that is bigger than the maximum chunk size \(maxChunkSize) of the RSA key"
|
||||||
|
case .signatureCreateFailed(let status):
|
||||||
|
return "Couldn't sign provided data: OSStatus \(status)"
|
||||||
|
case .signatureVerifyFailed(let status):
|
||||||
|
return "Couldn't verify signature of the provided data: OSStatus \(status)"
|
||||||
|
case .pemFileNotFound(let name):
|
||||||
|
return "Couldn't find a PEM file named '\(name)'"
|
||||||
|
case .derFileNotFound(let name):
|
||||||
|
return "Couldn't find a DER file named '\(name)'"
|
||||||
|
case .notAPublicKey:
|
||||||
|
return "Provided key is not a valid RSA public key"
|
||||||
|
case .notAPrivateKey:
|
||||||
|
return "Provided key is not a valid RSA pivate key"
|
||||||
|
case .x509CertificateFailed :
|
||||||
|
return "Couldn't prepend the provided key because it has an unexpected structure"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
163
Pods/SwiftyRSA/Source/X509Certificate.swift
generated
Normal file
163
Pods/SwiftyRSA/Source/X509Certificate.swift
generated
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
//
|
||||||
|
// X509Certificate.swift
|
||||||
|
// SwiftyRSA
|
||||||
|
//
|
||||||
|
// Created by Stchepinsky Nathan on 24/06/2021.
|
||||||
|
// Copyright © 2021 Scoop. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
/// Encoding/Decoding lengths as octets
|
||||||
|
private extension NSInteger {
|
||||||
|
func encodedOctets() -> [CUnsignedChar] {
|
||||||
|
// Short form
|
||||||
|
if self < 128 {
|
||||||
|
return [CUnsignedChar(self)]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Long form
|
||||||
|
let long = Int(log2(Double(self)) / 8 + 1)
|
||||||
|
var len = self
|
||||||
|
var result: [CUnsignedChar] = [CUnsignedChar(long + 0x80)]
|
||||||
|
|
||||||
|
for _ in 0..<long {
|
||||||
|
result.insert(CUnsignedChar(len & 0xFF), at: 1)
|
||||||
|
len = len >> 8
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
init?(octetBytes: [CUnsignedChar], startIdx: inout NSInteger) {
|
||||||
|
if octetBytes[startIdx] < 128 {
|
||||||
|
// Short form
|
||||||
|
self.init(octetBytes[startIdx])
|
||||||
|
startIdx += 1
|
||||||
|
} else {
|
||||||
|
// Long form
|
||||||
|
let octets = NSInteger(octetBytes[startIdx] as UInt8 - 128)
|
||||||
|
|
||||||
|
if octets > octetBytes.count - startIdx {
|
||||||
|
self.init(0)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var result = UInt64(0)
|
||||||
|
|
||||||
|
for octet in 1...octets {
|
||||||
|
result = (result << 8)
|
||||||
|
result = result + UInt64(octetBytes[startIdx + octet])
|
||||||
|
}
|
||||||
|
|
||||||
|
startIdx += 1 + octets
|
||||||
|
self.init(result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public extension Data {
|
||||||
|
// This code source come from Heimdall project https://github.com/henrinormak/Heimdall published under MIT Licence
|
||||||
|
|
||||||
|
/// This method prepend the X509 header to a given public key
|
||||||
|
func prependx509Header() -> Data {
|
||||||
|
let result = NSMutableData()
|
||||||
|
|
||||||
|
let encodingLength: Int = (self.count + 1).encodedOctets().count
|
||||||
|
let OID: [CUnsignedChar] = [0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
|
||||||
|
0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00]
|
||||||
|
|
||||||
|
var builder: [CUnsignedChar] = []
|
||||||
|
|
||||||
|
// ASN.1 SEQUENCE
|
||||||
|
builder.append(0x30)
|
||||||
|
|
||||||
|
// Overall size, made of OID + bitstring encoding + actual key
|
||||||
|
let size = OID.count + 2 + encodingLength + self.count
|
||||||
|
let encodedSize = size.encodedOctets()
|
||||||
|
builder.append(contentsOf: encodedSize)
|
||||||
|
result.append(builder, length: builder.count)
|
||||||
|
result.append(OID, length: OID.count)
|
||||||
|
builder.removeAll(keepingCapacity: false)
|
||||||
|
|
||||||
|
builder.append(0x03)
|
||||||
|
builder.append(contentsOf: (self.count + 1).encodedOctets())
|
||||||
|
builder.append(0x00)
|
||||||
|
result.append(builder, length: builder.count)
|
||||||
|
|
||||||
|
// Actual key bytes
|
||||||
|
result.append(self)
|
||||||
|
|
||||||
|
return result as Data
|
||||||
|
}
|
||||||
|
|
||||||
|
func hasX509Header() throws -> Bool {
|
||||||
|
let node: Asn1Parser.Node
|
||||||
|
do {
|
||||||
|
node = try Asn1Parser.parse(data: self)
|
||||||
|
} catch {
|
||||||
|
throw SwiftyRSAError.asn1ParsingFailed
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure the raw data is an ASN1 sequence
|
||||||
|
guard case .sequence(let nodes) = node else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Must contain 2 elements, a sequence and a bit string
|
||||||
|
if nodes.count != 2 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure the first node is an ASN1 sequence
|
||||||
|
guard case .sequence(let firstNode) = nodes[0] else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Must contain 2 elements, an object id and NULL
|
||||||
|
if firstNode.count != 2 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
guard case .objectIdentifier(_) = firstNode[0] else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
guard case .null = firstNode[1] else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// The 2sd child has to be a bit string containing a sequence of 2 int
|
||||||
|
let last = nodes[1]
|
||||||
|
if case .bitString(let secondChildSequence) = last {
|
||||||
|
return try secondChildSequence.isAnHeaderlessKey()
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func isAnHeaderlessKey() throws -> Bool {
|
||||||
|
let node: Asn1Parser.Node
|
||||||
|
do {
|
||||||
|
node = try Asn1Parser.parse(data: self)
|
||||||
|
} catch {
|
||||||
|
throw SwiftyRSAError.asn1ParsingFailed
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure the raw data is an ASN1 sequence
|
||||||
|
guard case .sequence(let nodes) = node else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Detect whether the sequence only has integers, in which case it's a headerless key
|
||||||
|
let onlyHasIntegers = nodes.filter { node -> Bool in
|
||||||
|
if case .integer = node {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}.isEmpty
|
||||||
|
|
||||||
|
// Headerless key
|
||||||
|
return onlyHasIntegers
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -689,6 +689,30 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
## SwiftyRSA
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015 Scoop Technologies, Inc.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
## ZLPhotoBrowser
|
## ZLPhotoBrowser
|
||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|||||||
@@ -922,6 +922,36 @@ SOFTWARE.
|
|||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
<string>PSGroupSpecifier</string>
|
<string>PSGroupSpecifier</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>FooterText</key>
|
||||||
|
<string>The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015 Scoop Technologies, Inc.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.</string>
|
||||||
|
<key>License</key>
|
||||||
|
<string>MIT</string>
|
||||||
|
<key>Title</key>
|
||||||
|
<string>SwiftyRSA</string>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>PSGroupSpecifier</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>FooterText</key>
|
<key>FooterText</key>
|
||||||
<string>MIT License
|
<string>MIT License
|
||||||
|
|||||||
@@ -4,15 +4,15 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
|||||||
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
|
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
|
||||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapNavi-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA" "${PODS_ROOT}/AMapTrack-NO-IDFA" "${PODS_ROOT}/Bugly" "${PODS_ROOT}/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapNavi-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA" "${PODS_ROOT}/AMapTrack-NO-IDFA" "${PODS_ROOT}/Bugly" "${PODS_ROOT}/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRPickerView" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush/Headers"
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRPickerView" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/SwiftyRSA" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush/Headers"
|
||||||
LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDBasicControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDCategoryKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDMAMapKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDWebImageKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDZFPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JXCategoryView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDBasicControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDCategoryKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDMAMapKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDWebImageKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDZFPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JXCategoryView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyRSA" "${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
||||||
OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private/DDDateKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private/DDTimerSwiftKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/BRPickerView/BRPickerView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private/DDDateKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private/DDTimerSwiftKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyRSA/SwiftyRSA.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/BRPickerView/BRPickerView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
||||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"Alamofire" -l"BRPickerView" -l"DDAudioPlayerKit_Private" -l"DDAutoUIKit_Private" -l"DDBasicControlsKit_Private" -l"DDCategoryKit_Private" -l"DDColorKit_Private" -l"DDControlsKit_Private" -l"DDDateKit_Private" -l"DDFontKit_Private" -l"DDLogKit_Private" -l"DDMAMapKit_Private" -l"DDNetworkingOfAlamofireKit_Private" -l"DDProgressHUDKit_Private" -l"DDTimerSwiftKit_Private" -l"DDToastKit_Private" -l"DDUtilsSwiftKit_Private" -l"DDWebImageKit_Private" -l"DDZFPlayerKit_Private" -l"ESTabBarController-swift" -l"IQKeyboardManagerSwift" -l"JCore" -l"JPush" -l"JXCategoryView" -l"Kingfisher" -l"MJRefresh" -l"RxCocoa" -l"RxRelay" -l"RxSwift" -l"SnapKit" -l"SwiftEntryKit" -l"ZLPhotoBrowser" -l"bz2" -l"c++" -l"resolv" -l"sqlite3" -l"swiftCoreGraphics" -l"z" -framework "AMapFoundationKit" -framework "AMapLocationKit" -framework "AMapNaviKit" -framework "AMapSearchKit" -framework "AMapTrackKit" -framework "AVFoundation" -framework "Accelerate" -framework "AudioToolbox" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "IJKMediaFramework" -framework "ImageIO" -framework "MapKit" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "OpenGLES" -framework "Photos" -framework "PhotosUI" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "VideoToolbox" -framework "WebKit" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "SwiftUI" -weak_framework "UserNotifications"
|
OTHER_LDFLAGS = $(inherited) -ObjC -l"Alamofire" -l"BRPickerView" -l"DDAudioPlayerKit_Private" -l"DDAutoUIKit_Private" -l"DDBasicControlsKit_Private" -l"DDCategoryKit_Private" -l"DDColorKit_Private" -l"DDControlsKit_Private" -l"DDDateKit_Private" -l"DDFontKit_Private" -l"DDLogKit_Private" -l"DDMAMapKit_Private" -l"DDNetworkingOfAlamofireKit_Private" -l"DDProgressHUDKit_Private" -l"DDTimerSwiftKit_Private" -l"DDToastKit_Private" -l"DDUtilsSwiftKit_Private" -l"DDWebImageKit_Private" -l"DDZFPlayerKit_Private" -l"ESTabBarController-swift" -l"IQKeyboardManagerSwift" -l"JCore" -l"JPush" -l"JXCategoryView" -l"Kingfisher" -l"MJRefresh" -l"RxCocoa" -l"RxRelay" -l"RxSwift" -l"SnapKit" -l"SwiftEntryKit" -l"SwiftyRSA" -l"ZLPhotoBrowser" -l"bz2" -l"c++" -l"resolv" -l"sqlite3" -l"swiftCoreGraphics" -l"z" -framework "AMapFoundationKit" -framework "AMapLocationKit" -framework "AMapNaviKit" -framework "AMapSearchKit" -framework "AMapTrackKit" -framework "AVFoundation" -framework "Accelerate" -framework "AudioToolbox" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "IJKMediaFramework" -framework "ImageIO" -framework "MapKit" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "OpenGLES" -framework "Photos" -framework "PhotosUI" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "VideoToolbox" -framework "WebKit" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "SwiftUI" -weak_framework "UserNotifications"
|
||||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private/DDDateKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private/DDTimerSwiftKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/BRPickerView/BRPickerView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private/DDDateKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private/DDTimerSwiftKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyRSA/SwiftyRSA.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/BRPickerView/BRPickerView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
||||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
|
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
|
||||||
PODS_ROOT = ${SRCROOT}/Pods
|
PODS_ROOT = ${SRCROOT}/Pods
|
||||||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
||||||
SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser"
|
SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyRSA" "${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser"
|
||||||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
||||||
|
|||||||
@@ -4,15 +4,15 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
|||||||
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
|
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
|
||||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapNavi-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA" "${PODS_ROOT}/AMapTrack-NO-IDFA" "${PODS_ROOT}/Bugly" "${PODS_ROOT}/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapNavi-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA" "${PODS_ROOT}/AMapTrack-NO-IDFA" "${PODS_ROOT}/Bugly" "${PODS_ROOT}/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRPickerView" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush/Headers"
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRPickerView" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/SwiftyRSA" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush/Headers"
|
||||||
LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDBasicControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDCategoryKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDMAMapKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDWebImageKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDZFPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JXCategoryView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDBasicControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDCategoryKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDMAMapKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDWebImageKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDZFPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JXCategoryView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyRSA" "${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
||||||
OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private/DDDateKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private/DDTimerSwiftKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/BRPickerView/BRPickerView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private/DDDateKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private/DDTimerSwiftKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyRSA/SwiftyRSA.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/BRPickerView/BRPickerView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
||||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"Alamofire" -l"BRPickerView" -l"DDAudioPlayerKit_Private" -l"DDAutoUIKit_Private" -l"DDBasicControlsKit_Private" -l"DDCategoryKit_Private" -l"DDColorKit_Private" -l"DDControlsKit_Private" -l"DDDateKit_Private" -l"DDFontKit_Private" -l"DDLogKit_Private" -l"DDMAMapKit_Private" -l"DDNetworkingOfAlamofireKit_Private" -l"DDProgressHUDKit_Private" -l"DDTimerSwiftKit_Private" -l"DDToastKit_Private" -l"DDUtilsSwiftKit_Private" -l"DDWebImageKit_Private" -l"DDZFPlayerKit_Private" -l"ESTabBarController-swift" -l"IQKeyboardManagerSwift" -l"JCore" -l"JPush" -l"JXCategoryView" -l"Kingfisher" -l"MJRefresh" -l"RxCocoa" -l"RxRelay" -l"RxSwift" -l"SnapKit" -l"SwiftEntryKit" -l"ZLPhotoBrowser" -l"bz2" -l"c++" -l"resolv" -l"sqlite3" -l"swiftCoreGraphics" -l"z" -framework "AMapFoundationKit" -framework "AMapLocationKit" -framework "AMapNaviKit" -framework "AMapSearchKit" -framework "AMapTrackKit" -framework "AVFoundation" -framework "Accelerate" -framework "AudioToolbox" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "IJKMediaFramework" -framework "ImageIO" -framework "MapKit" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "OpenGLES" -framework "Photos" -framework "PhotosUI" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "VideoToolbox" -framework "WebKit" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "SwiftUI" -weak_framework "UserNotifications"
|
OTHER_LDFLAGS = $(inherited) -ObjC -l"Alamofire" -l"BRPickerView" -l"DDAudioPlayerKit_Private" -l"DDAutoUIKit_Private" -l"DDBasicControlsKit_Private" -l"DDCategoryKit_Private" -l"DDColorKit_Private" -l"DDControlsKit_Private" -l"DDDateKit_Private" -l"DDFontKit_Private" -l"DDLogKit_Private" -l"DDMAMapKit_Private" -l"DDNetworkingOfAlamofireKit_Private" -l"DDProgressHUDKit_Private" -l"DDTimerSwiftKit_Private" -l"DDToastKit_Private" -l"DDUtilsSwiftKit_Private" -l"DDWebImageKit_Private" -l"DDZFPlayerKit_Private" -l"ESTabBarController-swift" -l"IQKeyboardManagerSwift" -l"JCore" -l"JPush" -l"JXCategoryView" -l"Kingfisher" -l"MJRefresh" -l"RxCocoa" -l"RxRelay" -l"RxSwift" -l"SnapKit" -l"SwiftEntryKit" -l"SwiftyRSA" -l"ZLPhotoBrowser" -l"bz2" -l"c++" -l"resolv" -l"sqlite3" -l"swiftCoreGraphics" -l"z" -framework "AMapFoundationKit" -framework "AMapLocationKit" -framework "AMapNaviKit" -framework "AMapSearchKit" -framework "AMapTrackKit" -framework "AVFoundation" -framework "Accelerate" -framework "AudioToolbox" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "IJKMediaFramework" -framework "ImageIO" -framework "MapKit" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "OpenGLES" -framework "Photos" -framework "PhotosUI" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "VideoToolbox" -framework "WebKit" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "SwiftUI" -weak_framework "UserNotifications"
|
||||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private/DDDateKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private/DDTimerSwiftKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/BRPickerView/BRPickerView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private/DDDateKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private/DDTimerSwiftKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyRSA/SwiftyRSA.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/BRPickerView/BRPickerView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
||||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
|
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
|
||||||
PODS_ROOT = ${SRCROOT}/Pods
|
PODS_ROOT = ${SRCROOT}/Pods
|
||||||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
||||||
SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser"
|
SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyRSA" "${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser"
|
||||||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
||||||
|
|||||||
@@ -4,15 +4,15 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
|||||||
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
|
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
|
||||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapNavi-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA" "${PODS_ROOT}/AMapTrack-NO-IDFA" "${PODS_ROOT}/Bugly" "${PODS_ROOT}/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapNavi-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA" "${PODS_ROOT}/AMapTrack-NO-IDFA" "${PODS_ROOT}/Bugly" "${PODS_ROOT}/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRPickerView" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush/Headers"
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRPickerView" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/SwiftyRSA" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush/Headers"
|
||||||
LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDBasicControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDCategoryKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDMAMapKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDWebImageKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDZFPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JXCategoryView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDBasicControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDCategoryKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDMAMapKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDWebImageKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDZFPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JXCategoryView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyRSA" "${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
||||||
OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private/DDDateKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private/DDTimerSwiftKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/BRPickerView/BRPickerView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private/DDDateKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private/DDTimerSwiftKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyRSA/SwiftyRSA.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/BRPickerView/BRPickerView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
||||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"Alamofire" -l"BRPickerView" -l"DDAudioPlayerKit_Private" -l"DDAutoUIKit_Private" -l"DDBasicControlsKit_Private" -l"DDCategoryKit_Private" -l"DDColorKit_Private" -l"DDControlsKit_Private" -l"DDDateKit_Private" -l"DDFontKit_Private" -l"DDLogKit_Private" -l"DDMAMapKit_Private" -l"DDNetworkingOfAlamofireKit_Private" -l"DDProgressHUDKit_Private" -l"DDTimerSwiftKit_Private" -l"DDToastKit_Private" -l"DDUtilsSwiftKit_Private" -l"DDWebImageKit_Private" -l"DDZFPlayerKit_Private" -l"ESTabBarController-swift" -l"IQKeyboardManagerSwift" -l"JCore" -l"JPush" -l"JXCategoryView" -l"Kingfisher" -l"MJRefresh" -l"RxCocoa" -l"RxRelay" -l"RxSwift" -l"SnapKit" -l"SwiftEntryKit" -l"ZLPhotoBrowser" -l"bz2" -l"c++" -l"resolv" -l"sqlite3" -l"swiftCoreGraphics" -l"z" -framework "AMapFoundationKit" -framework "AMapLocationKit" -framework "AMapNaviKit" -framework "AMapSearchKit" -framework "AMapTrackKit" -framework "AVFoundation" -framework "Accelerate" -framework "AudioToolbox" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "IJKMediaFramework" -framework "ImageIO" -framework "MapKit" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "OpenGLES" -framework "Photos" -framework "PhotosUI" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "VideoToolbox" -framework "WebKit" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "SwiftUI" -weak_framework "UserNotifications"
|
OTHER_LDFLAGS = $(inherited) -ObjC -l"Alamofire" -l"BRPickerView" -l"DDAudioPlayerKit_Private" -l"DDAutoUIKit_Private" -l"DDBasicControlsKit_Private" -l"DDCategoryKit_Private" -l"DDColorKit_Private" -l"DDControlsKit_Private" -l"DDDateKit_Private" -l"DDFontKit_Private" -l"DDLogKit_Private" -l"DDMAMapKit_Private" -l"DDNetworkingOfAlamofireKit_Private" -l"DDProgressHUDKit_Private" -l"DDTimerSwiftKit_Private" -l"DDToastKit_Private" -l"DDUtilsSwiftKit_Private" -l"DDWebImageKit_Private" -l"DDZFPlayerKit_Private" -l"ESTabBarController-swift" -l"IQKeyboardManagerSwift" -l"JCore" -l"JPush" -l"JXCategoryView" -l"Kingfisher" -l"MJRefresh" -l"RxCocoa" -l"RxRelay" -l"RxSwift" -l"SnapKit" -l"SwiftEntryKit" -l"SwiftyRSA" -l"ZLPhotoBrowser" -l"bz2" -l"c++" -l"resolv" -l"sqlite3" -l"swiftCoreGraphics" -l"z" -framework "AMapFoundationKit" -framework "AMapLocationKit" -framework "AMapNaviKit" -framework "AMapSearchKit" -framework "AMapTrackKit" -framework "AVFoundation" -framework "Accelerate" -framework "AudioToolbox" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "IJKMediaFramework" -framework "ImageIO" -framework "MapKit" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "OpenGLES" -framework "Photos" -framework "PhotosUI" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "VideoToolbox" -framework "WebKit" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "SwiftUI" -weak_framework "UserNotifications"
|
||||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private/DDDateKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private/DDTimerSwiftKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/BRPickerView/BRPickerView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private/DDAudioPlayerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private/DDDateKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private/DDTimerSwiftKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private/DDUtilsSwiftKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyRSA/SwiftyRSA.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/BRPickerView/BRPickerView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
||||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
|
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
|
||||||
PODS_ROOT = ${SRCROOT}/Pods
|
PODS_ROOT = ${SRCROOT}/Pods
|
||||||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
||||||
SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser"
|
SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DDAudioPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDDateKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDTimerSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDUtilsSwiftKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyRSA" "${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser"
|
||||||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/JPushExtension"
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/JPushExtension"
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRPickerView" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension/Headers"
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRPickerView" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/SwiftyRSA" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension/Headers"
|
||||||
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension"
|
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension"
|
||||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"JPushExtension" -l"resolv" -l"z" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "UserNotifications"
|
OTHER_LDFLAGS = $(inherited) -ObjC -l"JPushExtension" -l"resolv" -l"z" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "UserNotifications"
|
||||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/JPushExtension"
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/JPushExtension"
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRPickerView" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension/Headers"
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRPickerView" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/SwiftyRSA" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension/Headers"
|
||||||
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension"
|
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension"
|
||||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"JPushExtension" -l"resolv" -l"z" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "UserNotifications"
|
OTHER_LDFLAGS = $(inherited) -ObjC -l"JPushExtension" -l"resolv" -l"z" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "UserNotifications"
|
||||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/JPushExtension"
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/JPushExtension"
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRPickerView" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension/Headers"
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRPickerView" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/SwiftyRSA" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension/Headers"
|
||||||
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension"
|
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension"
|
||||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"JPushExtension" -l"resolv" -l"z" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "UserNotifications"
|
OTHER_LDFLAGS = $(inherited) -ObjC -l"JPushExtension" -l"resolv" -l"z" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "UserNotifications"
|
||||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
|
|||||||
5
Pods/Target Support Files/SwiftyRSA/SwiftyRSA-dummy.m
generated
Normal file
5
Pods/Target Support Files/SwiftyRSA/SwiftyRSA-dummy.m
generated
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
@interface PodsDummy_SwiftyRSA : NSObject
|
||||||
|
@end
|
||||||
|
@implementation PodsDummy_SwiftyRSA
|
||||||
|
@end
|
||||||
12
Pods/Target Support Files/SwiftyRSA/SwiftyRSA-prefix.pch
generated
Normal file
12
Pods/Target Support Files/SwiftyRSA/SwiftyRSA-prefix.pch
generated
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#ifdef __OBJC__
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#else
|
||||||
|
#ifndef FOUNDATION_EXPORT
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
#define FOUNDATION_EXPORT extern "C"
|
||||||
|
#else
|
||||||
|
#define FOUNDATION_EXPORT extern
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
20
Pods/Target Support Files/SwiftyRSA/SwiftyRSA-umbrella.h
generated
Normal file
20
Pods/Target Support Files/SwiftyRSA/SwiftyRSA-umbrella.h
generated
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
#ifdef __OBJC__
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#else
|
||||||
|
#ifndef FOUNDATION_EXPORT
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
#define FOUNDATION_EXPORT extern "C"
|
||||||
|
#else
|
||||||
|
#define FOUNDATION_EXPORT extern
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#import "NSData+SHA.h"
|
||||||
|
#import "SwiftyRSA.h"
|
||||||
|
#import "NSData+SHA.h"
|
||||||
|
#import "SwiftyRSA.h"
|
||||||
|
|
||||||
|
FOUNDATION_EXPORT double SwiftyRSAVersionNumber;
|
||||||
|
FOUNDATION_EXPORT const unsigned char SwiftyRSAVersionString[];
|
||||||
|
|
||||||
13
Pods/Target Support Files/SwiftyRSA/SwiftyRSA.debug.xcconfig
generated
Normal file
13
Pods/Target Support Files/SwiftyRSA/SwiftyRSA.debug.xcconfig
generated
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||||
|
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyRSA
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SwiftyRSA" "${PODS_ROOT}/Headers/Public"
|
||||||
|
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}"
|
||||||
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
|
PODS_ROOT = ${SRCROOT}
|
||||||
|
PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftyRSA
|
||||||
|
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||||
|
SKIP_INSTALL = YES
|
||||||
|
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
||||||
6
Pods/Target Support Files/SwiftyRSA/SwiftyRSA.modulemap
generated
Normal file
6
Pods/Target Support Files/SwiftyRSA/SwiftyRSA.modulemap
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
module SwiftyRSA {
|
||||||
|
umbrella header "SwiftyRSA-umbrella.h"
|
||||||
|
|
||||||
|
export *
|
||||||
|
module * { export * }
|
||||||
|
}
|
||||||
13
Pods/Target Support Files/SwiftyRSA/SwiftyRSA.release.xcconfig
generated
Normal file
13
Pods/Target Support Files/SwiftyRSA/SwiftyRSA.release.xcconfig
generated
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||||
|
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyRSA
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SwiftyRSA" "${PODS_ROOT}/Headers/Public"
|
||||||
|
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}"
|
||||||
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
|
PODS_ROOT = ${SRCROOT}
|
||||||
|
PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftyRSA
|
||||||
|
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||||
|
SKIP_INSTALL = YES
|
||||||
|
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
||||||
Reference in New Issue
Block a user