获取微博信息

master
hua 4 years ago
parent 16a7fec140
commit 6cccb75b0c
  1. 25
      Podfile
  2. 6
      Podfile.lock
  3. 6
      Pods/Manifest.lock
  4. 1059
      Pods/Pods.xcodeproj/project.pbxproj
  5. 28
      Pods/Pods.xcodeproj/xcuserdata/qihuapan.xcuserdatad/xcschemes/SwiftyJSON.xcscheme
  6. 10
      Pods/Pods.xcodeproj/xcuserdata/qihuapan.xcuserdatad/xcschemes/xcschememanagement.plist
  7. 21
      Pods/SwiftyJSON/LICENSE
  8. 562
      Pods/SwiftyJSON/README.md
  9. 1401
      Pods/SwiftyJSON/Source/SwiftyJSON/SwiftyJSON.swift
  10. 53
      Pods/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests-acknowledgements.markdown
  11. 97
      Pods/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests-acknowledgements.plist
  12. 5
      Pods/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests-dummy.m
  13. 3
      Pods/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests-frameworks-Debug-input-files.xcfilelist
  14. 3
      Pods/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests-frameworks-Release-input-files.xcfilelist
  15. 2
      Pods/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests-resources-Debug-input-files.xcfilelist
  16. 2
      Pods/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests-resources-Release-input-files.xcfilelist
  17. 13
      Pods/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests.debug.xcconfig
  18. 6
      Pods/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests.modulemap
  19. 13
      Pods/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests.release.xcconfig
  20. 25
      Pods/Target Support Files/Pods-Weibo/Pods-Weibo-acknowledgements.markdown
  21. 31
      Pods/Target Support Files/Pods-Weibo/Pods-Weibo-acknowledgements.plist
  22. 3
      Pods/Target Support Files/Pods-Weibo/Pods-Weibo-frameworks-Debug-input-files.xcfilelist
  23. 3
      Pods/Target Support Files/Pods-Weibo/Pods-Weibo-frameworks-Debug-output-files.xcfilelist
  24. 3
      Pods/Target Support Files/Pods-Weibo/Pods-Weibo-frameworks-Release-input-files.xcfilelist
  25. 3
      Pods/Target Support Files/Pods-Weibo/Pods-Weibo-frameworks-Release-output-files.xcfilelist
  26. 2
      Pods/Target Support Files/Pods-Weibo/Pods-Weibo-frameworks.sh
  27. 6
      Pods/Target Support Files/Pods-Weibo/Pods-Weibo.debug.xcconfig
  28. 6
      Pods/Target Support Files/Pods-Weibo/Pods-Weibo.release.xcconfig
  29. 75
      Pods/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-acknowledgements.markdown
  30. 99
      Pods/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-acknowledgements.plist
  31. 4
      Pods/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-frameworks-Debug-input-files.xcfilelist
  32. 3
      Pods/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-frameworks-Debug-output-files.xcfilelist
  33. 4
      Pods/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-frameworks-Release-input-files.xcfilelist
  34. 3
      Pods/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-frameworks-Release-output-files.xcfilelist
  35. 2
      Pods/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-frameworks.sh
  36. 2
      Pods/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-resources-Debug-input-files.xcfilelist
  37. 0
      Pods/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-resources-Debug-output-files.xcfilelist
  38. 2
      Pods/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-resources-Release-input-files.xcfilelist
  39. 0
      Pods/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-resources-Release-output-files.xcfilelist
  40. 0
      Pods/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-resources.sh
  41. 10
      Pods/Target Support Files/Pods-WeiboTests/Pods-WeiboTests.debug.xcconfig
  42. 10
      Pods/Target Support Files/Pods-WeiboTests/Pods-WeiboTests.release.xcconfig
  43. 2
      Pods/Target Support Files/SwiftyJSON/SwiftyJSON-Info.plist
  44. 5
      Pods/Target Support Files/SwiftyJSON/SwiftyJSON-dummy.m
  45. 12
      Pods/Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch
  46. 4
      Pods/Target Support Files/SwiftyJSON/SwiftyJSON-umbrella.h
  47. 10
      Pods/Target Support Files/SwiftyJSON/SwiftyJSON.debug.xcconfig
  48. 6
      Pods/Target Support Files/SwiftyJSON/SwiftyJSON.modulemap
  49. 10
      Pods/Target Support Files/SwiftyJSON/SwiftyJSON.release.xcconfig
  50. 91
      Weibo.xcodeproj/project.pbxproj
  51. 34
      Weibo.xcworkspace/xcuserdata/qihuapan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  52. 21
      Weibo.xcworkspace/xcuserdata/qihuapan.xcuserdatad/xcdebugger/Expressions.xcexplist
  53. 3
      Weibo/AppDelegate.swift
  54. 21
      Weibo/Assets.xcassets/comment.imageset/Contents.json
  55. BIN
      Weibo/Assets.xcassets/comment.imageset/comment.png
  56. 21
      Weibo/Assets.xcassets/like.imageset/Contents.json
  57. BIN
      Weibo/Assets.xcassets/like.imageset/like.png
  58. 21
      Weibo/Assets.xcassets/loading.imageset/Contents.json
  59. BIN
      Weibo/Assets.xcassets/loading.imageset/loading.png
  60. 21
      Weibo/Assets.xcassets/share.imageset/Contents.json
  61. BIN
      Weibo/Assets.xcassets/share.imageset/share.png
  62. 181
      Weibo/IndexView.swift
  63. 49
      Weibo/LoginView.swift
  64. 3
      Weibo/Weibo.xcdatamodeld/Weibo.xcdatamodel/contents
  65. 2
      WeiboTests/WeiboTests.swift

@ -1,20 +1,19 @@
# Uncomment the next line to define a global platform for your project
platform :ios, '13.0'
use_frameworks!
def testing_pods
pod "Weibo_SDK", :git => "https://github.com/sinaweibosdk/weibo_ios_sdk.git"
pod 'AlamofireImage', '~> 4.1'
pod 'SwiftyJSON', '~> 4.0'
end
target 'Weibo' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
pod "Weibo_SDK", :git => "https://github.com/sinaweibosdk/weibo_ios_sdk.git"
pod 'AlamofireImage', '~> 4.1'
# Pods for Weibo
target 'WeiboTests' do
inherit! :search_paths
# Pods for testing
end
target 'WeiboUITests' do
# Pods for testing
end
testing_pods
end
target 'WeiboTests' do
# Comment the next line if you don't want to use dynamic frameworks
testing_pods
end

@ -2,16 +2,19 @@ PODS:
- Alamofire (5.2.2)
- AlamofireImage (4.1.0):
- Alamofire (~> 5.1)
- SwiftyJSON (4.3.0)
- Weibo_SDK (3.2.7)
DEPENDENCIES:
- AlamofireImage (~> 4.1)
- SwiftyJSON (~> 4.0)
- Weibo_SDK (from `https://github.com/sinaweibosdk/weibo_ios_sdk.git`)
SPEC REPOS:
trunk:
- Alamofire
- AlamofireImage
- SwiftyJSON
EXTERNAL SOURCES:
Weibo_SDK:
@ -25,8 +28,9 @@ CHECKOUT OPTIONS:
SPEC CHECKSUMS:
Alamofire: 814429acc853c6c54ff123fc3d2ef66803823ce0
AlamofireImage: c4a2ba349885fb3064feb74d2e547bd42ce9be10
SwiftyJSON: 6faa0040f8b59dead0ee07436cbf76b73c08fd08
Weibo_SDK: 5a4d08f7e1fedbb635435e4585c8c0439c7da089
PODFILE CHECKSUM: 599c8e5ab6c4a30be0c9160b75846117173d99df
PODFILE CHECKSUM: 3358a770b56bb5d11548a82df2f4a186f3dd13b8
COCOAPODS: 1.9.3

6
Pods/Manifest.lock generated

@ -2,16 +2,19 @@ PODS:
- Alamofire (5.2.2)
- AlamofireImage (4.1.0):
- Alamofire (~> 5.1)
- SwiftyJSON (4.3.0)
- Weibo_SDK (3.2.7)
DEPENDENCIES:
- AlamofireImage (~> 4.1)
- SwiftyJSON (~> 4.0)
- Weibo_SDK (from `https://github.com/sinaweibosdk/weibo_ios_sdk.git`)
SPEC REPOS:
trunk:
- Alamofire
- AlamofireImage
- SwiftyJSON
EXTERNAL SOURCES:
Weibo_SDK:
@ -25,8 +28,9 @@ CHECKOUT OPTIONS:
SPEC CHECKSUMS:
Alamofire: 814429acc853c6c54ff123fc3d2ef66803823ce0
AlamofireImage: c4a2ba349885fb3064feb74d2e547bd42ce9be10
SwiftyJSON: 6faa0040f8b59dead0ee07436cbf76b73c08fd08
Weibo_SDK: 5a4d08f7e1fedbb635435e4585c8c0439c7da089
PODFILE CHECKSUM: 599c8e5ab6c4a30be0c9160b75846117173d99df
PODFILE CHECKSUM: 3358a770b56bb5d11548a82df2f4a186f3dd13b8
COCOAPODS: 1.9.3

File diff suppressed because it is too large Load Diff

@ -7,31 +7,30 @@
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForAnalyzing = "YES"
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
buildForArchiving = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "D94B76C1728FFF3A16CA8C964A943BE9"
BuildableName = "Pods_Weibo_WeiboUITests.framework"
BlueprintName = "Pods-Weibo-WeiboUITests"
BlueprintIdentifier = "D118A6A04828FD3CDA8640CD2B6796D2"
BuildableName = "SwiftyJSON.framework"
BlueprintName = "SwiftyJSON"
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>
shouldUseLaunchSchemeArgsEnv = "YES"
buildConfiguration = "Debug">
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
@ -39,14 +38,17 @@
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
buildConfiguration = "Debug"
allowLocationSimulation = "YES">
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
debugDocumentVersioning = "YES"
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">

@ -18,21 +18,21 @@
<key>orderHint</key>
<integer>1</integer>
</dict>
<key>Pods-Weibo-WeiboUITests.xcscheme</key>
<key>Pods-Weibo.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>3</integer>
<integer>2</integer>
</dict>
<key>Pods-Weibo.xcscheme</key>
<key>Pods-WeiboTests.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>2</integer>
<integer>3</integer>
</dict>
<key>Pods-WeiboTests.xcscheme</key>
<key>SwiftyJSON.xcscheme</key>
<dict>
<key>isShown</key>
<false/>

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2017 Ruoyu Fu
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.

@ -0,0 +1,562 @@
# SwiftyJSON
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) ![CocoaPods](https://img.shields.io/cocoapods/v/SwiftyJSON.svg) ![Platform](https://img.shields.io/badge/platforms-iOS%208.0%20%7C%20macOS%2010.10%20%7C%20tvOS%209.0%20%7C%20watchOS%203.0-F28D00.svg) [![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg)](https://houndci.com)
SwiftyJSON makes it easy to deal with JSON data in Swift.
Platform | Build Status
---------| --------------|
*OS | [![Travis CI](https://travis-ci.org/SwiftyJSON/SwiftyJSON.svg?branch=master)](https://travis-ci.org/SwiftyJSON/SwiftyJSON) |
[Linux](https://github.com/IBM-Swift/SwiftyJSON) | [![Build Status](https://travis-ci.org/IBM-Swift/SwiftyJSON.svg?branch=master)](https://travis-ci.org/IBM-Swift/SwiftyJSON) |
1. [Why is the typical JSON handling in Swift NOT good](#why-is-the-typical-json-handling-in-swift-not-good)
2. [Requirements](#requirements)
3. [Integration](#integration)
4. [Usage](#usage)
- [Initialization](#initialization)
- [Subscript](#subscript)
- [Loop](#loop)
- [Error](#error)
- [Optional getter](#optional-getter)
- [Non-optional getter](#non-optional-getter)
- [Setter](#setter)
- [Raw object](#raw-object)
- [Literal convertibles](#literal-convertibles)
- [Merging](#merging)
5. [Work with Alamofire](#work-with-alamofire)
6. [Work with Moya](#work-with-moya)
7. [SwiftyJSON Model Generator](#swiftyjson-model-generator)
> [中文介绍](http://tangplin.github.io/swiftyjson/)
## Why is the typical JSON handling in Swift NOT good?
Swift is very strict about types. But although explicit typing is good for saving us from mistakes, it becomes painful when dealing with JSON and other areas that are, by nature, implicit about types.
Take the Twitter API for example. Say we want to retrieve a user's "name" value of some tweet in Swift (according to [Twitter's API](https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-home_timeline)).
The code would look like this:
```swift
if let statusesArray = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [[String: Any]],
let user = statusesArray[0]["user"] as? [String: Any],
let username = user["name"] as? String {
// Finally we got the username
}
```
It's not good.
Even if we use optional chaining, it would be messy:
```swift
if let JSONObject = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [[String: Any]],
let username = (JSONObject[0]["user"] as? [String: Any])?["name"] as? String {
// There's our username
}
```
An unreadable mess--for something that should really be simple!
With SwiftyJSON all you have to do is:
```swift
let json = JSON(data: dataFromNetworking)
if let userName = json[0]["user"]["name"].string {
//Now you got your value
}
```
And don't worry about the Optional Wrapping thing. It's done for you automatically.
```swift
let json = JSON(data: dataFromNetworking)
let result = json[999999]["wrong_key"]["wrong_name"]
if let userName = result.string {
//Calm down, take it easy, the ".string" property still produces the correct Optional String type with safety
} else {
//Print the error
print(result.error)
}
```
## Requirements
- iOS 8.0+ | macOS 10.10+ | tvOS 9.0+ | watchOS 2.0+
- Xcode 8
## Integration
#### CocoaPods (iOS 8+, OS X 10.9+)
You can use [CocoaPods](http://cocoapods.org/) to install `SwiftyJSON` by adding it to your `Podfile`:
```ruby
platform :ios, '8.0'
use_frameworks!
target 'MyApp' do
pod 'SwiftyJSON', '~> 4.0'
end
```
#### Carthage (iOS 8+, OS X 10.9+)
You can use [Carthage](https://github.com/Carthage/Carthage) to install `SwiftyJSON` by adding it to your `Cartfile`:
```
github "SwiftyJSON/SwiftyJSON" ~> 4.0
```
If you use Carthage to build your dependencies, make sure you have added `SwiftyJSON.framework` to the "Linked Frameworks and Libraries" section of your target, and have included them in your Carthage framework copying build phase.
#### Swift Package Manager
You can use [The Swift Package Manager](https://swift.org/package-manager) to install `SwiftyJSON` by adding the proper description to your `Package.swift` file:
```swift
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "YOUR_PROJECT_NAME",
dependencies: [
.package(url: "https://github.com/SwiftyJSON/SwiftyJSON.git", from: "4.0.0"),
]
)
```
Then run `swift build` whenever you get prepared.
#### Manually (iOS 7+, OS X 10.9+)
To use this library in your project manually you may:
1. for Projects, just drag SwiftyJSON.swift to the project tree
2. for Workspaces, include the whole SwiftyJSON.xcodeproj
## Usage
#### Initialization
```swift
import SwiftyJSON
```
```swift
let json = JSON(data: dataFromNetworking)
```
Or
```swift
let json = JSON(jsonObject)
```
Or
```swift
if let dataFromString = jsonString.data(using: .utf8, allowLossyConversion: false) {
let json = JSON(data: dataFromString)
}
```
#### Subscript
```swift
// Getting a double from a JSON Array
let name = json[0].double
```
```swift
// Getting an array of string from a JSON Array
let arrayNames = json["users"].arrayValue.map {$0["name"].stringValue}
```
```swift
// Getting a string from a JSON Dictionary
let name = json["name"].stringValue
```
```swift
// Getting a string using a path to the element
let path: [JSONSubscriptType] = [1,"list",2,"name"]
let name = json[path].string
// Just the same
let name = json[1]["list"][2]["name"].string
// Alternatively
let name = json[1,"list",2,"name"].string
```
```swift
// With a hard way
let name = json[].string
```
```swift
// With a custom way
let keys:[JSONSubscriptType] = [1,"list",2,"name"]
let name = json[keys].string
```
#### Loop
```swift
// If json is .Dictionary
for (key,subJson):(String, JSON) in json {
// Do something you want
}
```
*The first element is always a String, even if the JSON is an Array*
```swift
// If json is .Array
// The `index` is 0..<json.count's string value
for (index,subJson):(String, JSON) in json {
// Do something you want
}
```
#### Error
##### SwiftyJSON 4.x
SwiftyJSON 4.x introduces an enum type called `SwiftyJSONError`, which includes `unsupportedType`, `indexOutOfBounds`, `elementTooDeep`, `wrongType`, `notExist` and `invalidJSON`, at the same time, `ErrorDomain` are being replaced by `SwiftyJSONError.errorDomain`.
Note: Those old error types are deprecated in SwiftyJSON 4.x and will be removed in the future release.
##### SwiftyJSON 3.x
Use a subscript to get/set a value in an Array or Dictionary
If the JSON is:
* an array, the app may crash with "index out-of-bounds."
* a dictionary, it will be assigned to `nil` without a reason.
* not an array or a dictionary, the app may crash with an "unrecognised selector" exception.
This will never happen in SwiftyJSON.
```swift
let json = JSON(["name", "age"])
if let name = json[999].string {
// Do something you want
} else {
print(json[999].error!) // "Array[999] is out of bounds"
}
```
```swift
let json = JSON(["name":"Jack", "age": 25])
if let name = json["address"].string {
// Do something you want
} else {
print(json["address"].error!) // "Dictionary["address"] does not exist"
}
```
```swift
let json = JSON(12345)
if let age = json[0].string {
// Do something you want
} else {
print(json[0]) // "Array[0] failure, It is not an array"
print(json[0].error!) // "Array[0] failure, It is not an array"
}
if let name = json["name"].string {
// Do something you want
} else {
print(json["name"]) // "Dictionary[\"name"] failure, It is not an dictionary"
print(json["name"].error!) // "Dictionary[\"name"] failure, It is not an dictionary"
}
```
#### Optional getter
```swift
// NSNumber
if let id = json["user"]["favourites_count"].number {
// Do something you want
} else {
// Print the error
print(json["user"]["favourites_count"].error!)
}
```
```swift
// String
if let id = json["user"]["name"].string {
// Do something you want
} else {
// Print the error
print(json["user"]["name"].error!)
}
```
```swift
// Bool
if let id = json["user"]["is_translator"].bool {
// Do something you want
} else {
// Print the error
print(json["user"]["is_translator"].error!)
}
```
```swift
// Int
if let id = json["user"]["id"].int {
// Do something you want
} else {
// Print the error
print(json["user"]["id"].error!)
}
...
```
#### Non-optional getter
Non-optional getter is named `xxxValue`
```swift
// If not a Number or nil, return 0
let id: Int = json["id"].intValue
```
```swift
// If not a String or nil, return ""
let name: String = json["name"].stringValue
```
```swift
// If not an Array or nil, return []
let list: Array<JSON> = json["list"].arrayValue
```
```swift
// If not a Dictionary or nil, return [:]
let user: Dictionary<String, JSON> = json["user"].dictionaryValue
```
#### Setter
```swift
json["name"] = JSON("new-name")
json[0] = JSON(1)
```
```swift
json["id"].int = 1234567890
json["coordinate"].double = 8766.766
json["name"].string = "Jack"
json.arrayObject = [1,2,3,4]
json.dictionaryObject = ["name":"Jack", "age":25]
```
#### Raw object
```swift
let rawObject: Any = json.object
```
```swift
let rawValue: Any = json.rawValue
```
```swift
//convert the JSON to raw NSData
do {
let rawData = try json.rawData()
//Do something you want
} catch {
print("Error \(error)")
}
```
```swift
//convert the JSON to a raw String
if let rawString = json.rawString() {
//Do something you want
} else {
print("json.rawString is nil")
}
```
#### Existence
```swift
// shows you whether value specified in JSON or not
if json["name"].exists()
```
#### Literal convertibles
For more info about literal convertibles: [Swift Literal Convertibles](http://nshipster.com/swift-literal-convertible/)
```swift
// StringLiteralConvertible
let json: JSON = "I'm a json"
```
```swift
/ /IntegerLiteralConvertible
let json: JSON = 12345
```
```swift
// BooleanLiteralConvertible
let json: JSON = true
```
```swift
// FloatLiteralConvertible
let json: JSON = 2.8765
```
```swift
// DictionaryLiteralConvertible
let json: JSON = ["I":"am", "a":"json"]
```
```swift
// ArrayLiteralConvertible
let json: JSON = ["I", "am", "a", "json"]
```
```swift
// With subscript in array
var json: JSON = [1,2,3]
json[0] = 100
json[1] = 200
json[2] = 300
json[999] = 300 // Don't worry, nothing will happen
```
```swift
// With subscript in dictionary
var json: JSON = ["name": "Jack", "age": 25]
json["name"] = "Mike"
json["age"] = "25" // It's OK to set String
json["address"] = "L.A." // Add the "address": "L.A." in json
```
```swift
// Array & Dictionary
var json: JSON = ["name": "Jack", "age": 25, "list": ["a", "b", "c", ["what": "this"]]]
json["list"][3]["what"] = "that"
json["list",3,"what"] = "that"
let path: [JSONSubscriptType] = ["list",3,"what"]
json[path] = "that"
```
```swift
// With other JSON objects
let user: JSON = ["username" : "Steve", "password": "supersecurepassword"]
let auth: JSON = [
"user": user.object, // use user.object instead of just user
"apikey": "supersecretapitoken"
]
```
#### Merging
It is possible to merge one JSON into another JSON. Merging a JSON into another JSON adds all non existing values to the original JSON which are only present in the `other` JSON.
If both JSONs contain a value for the same key, _mostly_ this value gets overwritten in the original JSON, but there are two cases where it provides some special treatment:
- In case of both values being a `JSON.Type.array` the values form the array found in the `other` JSON getting appended to the original JSON's array value.
- In case of both values being a `JSON.Type.dictionary` both JSON-values are getting merged the same way the encapsulating JSON is merged.
In case, where two fields in a JSON have a different types, the value will get always overwritten.
There are two different fashions for merging: `merge` modifies the original JSON, whereas `merged` works non-destructively on a copy.
```swift
let original: JSON = [
"first_name": "John",
"age": 20,
"skills": ["Coding", "Reading"],
"address": [
"street": "Front St",
"zip": "12345",
]
]
let update: JSON = [
"last_name": "Doe",
"age": 21,
"skills": ["Writing"],
"address": [
"zip": "12342",
"city": "New York City"
]
]
let updated = original.merge(with: update)
// [
// "first_name": "John",
// "last_name": "Doe",
// "age": 21,
// "skills": ["Coding", "Reading", "Writing"],
// "address": [
// "street": "Front St",
// "zip": "12342",
// "city": "New York City"
// ]
// ]
```
## String representation
There are two options available:
- use the default Swift one
- use a custom one that will handle optionals well and represent `nil` as `"null"`:
```swift
let dict = ["1":2, "2":"two", "3": nil] as [String: Any?]
let json = JSON(dict)
let representation = json.rawString(options: [.castNilToNSNull: true])
// representation is "{\"1\":2,\"2\":\"two\",\"3\":null}", which represents {"1":2,"2":"two","3":null}
```
## Work with [Alamofire](https://github.com/Alamofire/Alamofire)
SwiftyJSON nicely wraps the result of the Alamofire JSON response handler:
```swift
Alamofire.request(url, method: .get).validate().responseJSON { response in
switch response.result {
case .success(let value):
let json = JSON(value)
print("JSON: \(json)")
case .failure(let error):
print(error)
}
}
```
We also provide an extension of Alamofire for serializing NSData to SwiftyJSON's JSON.
See: [Alamofire-SwiftyJSON](https://github.com/SwiftyJSON/Alamofire-SwiftyJSON)
## Work with [Moya](https://github.com/Moya/Moya)
SwiftyJSON parse data to JSON:
```swift
let provider = MoyaProvider<Backend>()
provider.request(.showProducts) { result in
switch result {
case let .success(moyaResponse):
let data = moyaResponse.data
let json = JSON(data: data) // convert network data to json
print(json)
case let .failure(error):
print("error: \(error)")
}
}
```
## SwiftyJSON Model Generator
Tools to generate SwiftyJSON Models
* [JSON Cafe](http://www.jsoncafe.com/)
* [JSON Export](https://github.com/Ahmed-Ali/JSONExport)

File diff suppressed because it is too large Load Diff

@ -1,53 +0,0 @@
# Acknowledgements
This application makes use of the following third party libraries:
## Alamofire
Copyright (c) 2014-2020 Alamofire Software Foundation (http://alamofire.org/)
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.
## AlamofireImage
Copyright (c) 2015 Alamofire Software Foundation (http://alamofire.org/)
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.
## Weibo_SDK
Generated by CocoaPods - https://cocoapods.org

@ -1,97 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>FooterText</key>
<string>This application makes use of the following third party libraries:</string>
<key>Title</key>
<string>Acknowledgements</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Copyright (c) 2014-2020 Alamofire Software Foundation (http://alamofire.org/)
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>Alamofire</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Copyright (c) 2015 Alamofire Software Foundation (http://alamofire.org/)
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>AlamofireImage</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string></string>
<key>License</key>
<string>MIT</string>
<key>Title</key>
<string>Weibo_SDK</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Generated by CocoaPods - https://cocoapods.org</string>
<key>Title</key>
<string></string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
</array>
<key>StringsTable</key>
<string>Acknowledgements</string>
<key>Title</key>
<string>Acknowledgements</string>
</dict>
</plist>

@ -1,5 +0,0 @@
#import <Foundation/Foundation.h>
@interface PodsDummy_Pods_Weibo_WeiboUITests : NSObject
@end
@implementation PodsDummy_Pods_Weibo_WeiboUITests
@end

@ -1,3 +0,0 @@
${PODS_ROOT}/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests-frameworks.sh
${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework
${BUILT_PRODUCTS_DIR}/AlamofireImage/AlamofireImage.framework

@ -1,3 +0,0 @@
${PODS_ROOT}/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests-frameworks.sh
${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework
${BUILT_PRODUCTS_DIR}/AlamofireImage/AlamofireImage.framework

@ -1,2 +0,0 @@
${PODS_ROOT}/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests-resources.sh
${PODS_ROOT}/Weibo_SDK/libWeiboSDK/WeiboSDK.bundle

@ -1,2 +0,0 @@
${PODS_ROOT}/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests-resources.sh
${PODS_ROOT}/Weibo_SDK/libWeiboSDK/WeiboSDK.bundle

@ -1,13 +0,0 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage/AlamofireImage.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Weibo_SDK"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Weibo_SDK/libWeiboSDK"
OTHER_LDFLAGS = $(inherited) -ObjC -l"WeiboSDK" -l"sqlite3" -l"z" -framework "Alamofire" -framework "AlamofireImage" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "Photos" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
PODS_ROOT = ${SRCROOT}/Pods
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

@ -1,6 +0,0 @@
framework module Pods_Weibo_WeiboUITests {
umbrella header "Pods-Weibo-WeiboUITests-umbrella.h"
export *
module * { export * }
}

@ -1,13 +0,0 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage/AlamofireImage.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Weibo_SDK"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Weibo_SDK/libWeiboSDK"
OTHER_LDFLAGS = $(inherited) -ObjC -l"WeiboSDK" -l"sqlite3" -l"z" -framework "Alamofire" -framework "AlamofireImage" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "Photos" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
PODS_ROOT = ${SRCROOT}/Pods
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

@ -47,6 +47,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
## SwiftyJSON
The MIT License (MIT)
Copyright (c) 2017 Ruoyu Fu
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.
## Weibo_SDK

@ -70,6 +70,37 @@ THE SOFTWARE.
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>The MIT License (MIT)
Copyright (c) 2017 Ruoyu Fu
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>SwiftyJSON</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string></string>

@ -1,3 +1,4 @@
${PODS_ROOT}/Target Support Files/Pods-Weibo/Pods-Weibo-frameworks.sh
${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework
${BUILT_PRODUCTS_DIR}/AlamofireImage/AlamofireImage.framework
${BUILT_PRODUCTS_DIR}/AlamofireImage/AlamofireImage.framework
${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework

@ -1,2 +1,3 @@
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AlamofireImage.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AlamofireImage.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework

@ -1,3 +1,4 @@
${PODS_ROOT}/Target Support Files/Pods-Weibo/Pods-Weibo-frameworks.sh
${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework
${BUILT_PRODUCTS_DIR}/AlamofireImage/AlamofireImage.framework
${BUILT_PRODUCTS_DIR}/AlamofireImage/AlamofireImage.framework
${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework

@ -1,2 +1,3 @@
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AlamofireImage.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AlamofireImage.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework

@ -199,10 +199,12 @@ fi
if [[ "$CONFIGURATION" == "Debug" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework"
install_framework "${BUILT_PRODUCTS_DIR}/AlamofireImage/AlamofireImage.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework"
fi
if [[ "$CONFIGURATION" == "Release" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework"
install_framework "${BUILT_PRODUCTS_DIR}/AlamofireImage/AlamofireImage.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework"
fi
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
wait

@ -1,10 +1,10 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage"
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage/AlamofireImage.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Weibo_SDK"
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage/AlamofireImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Weibo_SDK"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Weibo_SDK/libWeiboSDK"
OTHER_LDFLAGS = $(inherited) -ObjC -l"WeiboSDK" -l"sqlite3" -l"z" -framework "Alamofire" -framework "AlamofireImage" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "Photos" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit"
OTHER_LDFLAGS = $(inherited) -ObjC -l"WeiboSDK" -l"sqlite3" -l"z" -framework "Alamofire" -framework "AlamofireImage" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "Photos" -framework "QuartzCore" -framework "Security" -framework "SwiftyJSON" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

@ -1,10 +1,10 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage"
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage/AlamofireImage.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Weibo_SDK"
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage/AlamofireImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Weibo_SDK"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Weibo_SDK/libWeiboSDK"
OTHER_LDFLAGS = $(inherited) -ObjC -l"WeiboSDK" -l"sqlite3" -l"z" -framework "Alamofire" -framework "AlamofireImage" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "Photos" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit"
OTHER_LDFLAGS = $(inherited) -ObjC -l"WeiboSDK" -l"sqlite3" -l"z" -framework "Alamofire" -framework "AlamofireImage" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "Photos" -framework "QuartzCore" -framework "Security" -framework "SwiftyJSON" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

@ -1,3 +1,78 @@
# Acknowledgements
This application makes use of the following third party libraries:
## Alamofire
Copyright (c) 2014-2020 Alamofire Software Foundation (http://alamofire.org/)
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.
## AlamofireImage
Copyright (c) 2015 Alamofire Software Foundation (http://alamofire.org/)
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.
## SwiftyJSON
The MIT License (MIT)
Copyright (c) 2017 Ruoyu Fu
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.
## Weibo_SDK
Generated by CocoaPods - https://cocoapods.org

@ -12,6 +12,105 @@
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Copyright (c) 2014-2020 Alamofire Software Foundation (http://alamofire.org/)
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>Alamofire</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Copyright (c) 2015 Alamofire Software Foundation (http://alamofire.org/)
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>AlamofireImage</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>The MIT License (MIT)
Copyright (c) 2017 Ruoyu Fu
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>SwiftyJSON</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string></string>
<key>License</key>
<string>MIT</string>
<key>Title</key>
<string>Weibo_SDK</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Generated by CocoaPods - https://cocoapods.org</string>

@ -0,0 +1,4 @@
${PODS_ROOT}/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-frameworks.sh
${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework
${BUILT_PRODUCTS_DIR}/AlamofireImage/AlamofireImage.framework
${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework

@ -1,2 +1,3 @@
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AlamofireImage.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AlamofireImage.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework

@ -0,0 +1,4 @@
${PODS_ROOT}/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-frameworks.sh
${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework
${BUILT_PRODUCTS_DIR}/AlamofireImage/AlamofireImage.framework
${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework

@ -1,2 +1,3 @@
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AlamofireImage.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AlamofireImage.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework

@ -199,10 +199,12 @@ fi
if [[ "$CONFIGURATION" == "Debug" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework"
install_framework "${BUILT_PRODUCTS_DIR}/AlamofireImage/AlamofireImage.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework"
fi
if [[ "$CONFIGURATION" == "Release" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework"
install_framework "${BUILT_PRODUCTS_DIR}/AlamofireImage/AlamofireImage.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework"
fi
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
wait

@ -0,0 +1,2 @@
${PODS_ROOT}/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-resources.sh
${PODS_ROOT}/Weibo_SDK/libWeiboSDK/WeiboSDK.bundle

@ -0,0 +1,2 @@
${PODS_ROOT}/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-resources.sh
${PODS_ROOT}/Weibo_SDK/libWeiboSDK/WeiboSDK.bundle

@ -1,7 +1,11 @@
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage"
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage/AlamofireImage.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Weibo_SDK"
OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "Alamofire" -framework "AlamofireImage" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "Photos" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit"
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage/AlamofireImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Weibo_SDK"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Weibo_SDK/libWeiboSDK"
OTHER_LDFLAGS = $(inherited) -ObjC -l"WeiboSDK" -l"sqlite3" -l"z" -framework "Alamofire" -framework "AlamofireImage" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "Photos" -framework "QuartzCore" -framework "Security" -framework "SwiftyJSON" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

@ -1,7 +1,11 @@
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage"
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage/AlamofireImage.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Weibo_SDK"
OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "Alamofire" -framework "AlamofireImage" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "Photos" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit"
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AlamofireImage/AlamofireImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Weibo_SDK"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Weibo_SDK/libWeiboSDK"
OTHER_LDFLAGS = $(inherited) -ObjC -l"WeiboSDK" -l"sqlite3" -l"z" -framework "Alamofire" -framework "AlamofireImage" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "Photos" -framework "QuartzCore" -framework "Security" -framework "SwiftyJSON" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<string>4.3.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>

@ -0,0 +1,5 @@
#import <Foundation/Foundation.h>
@interface PodsDummy_SwiftyJSON : NSObject
@end
@implementation PodsDummy_SwiftyJSON
@end

@ -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

@ -11,6 +11,6 @@
#endif
FOUNDATION_EXPORT double Pods_Weibo_WeiboUITestsVersionNumber;
FOUNDATION_EXPORT const unsigned char Pods_Weibo_WeiboUITestsVersionString[];
FOUNDATION_EXPORT double SwiftyJSONVersionNumber;
FOUNDATION_EXPORT const unsigned char SwiftyJSONVersionString[];

@ -0,0 +1,10 @@
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_ROOT = ${SRCROOT}
PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftyJSON
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
SKIP_INSTALL = YES
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

@ -0,0 +1,6 @@
framework module SwiftyJSON {
umbrella header "SwiftyJSON-umbrella.h"
export *
module * { export * }
}

@ -0,0 +1,10 @@
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_ROOT = ${SRCROOT}
PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftyJSON
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
SKIP_INSTALL = YES
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

@ -7,6 +7,7 @@
objects = {
/* Begin PBXBuildFile section */
43F5631C74EF810F4F999A66 /* Pods_WeiboTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 11A13FDA013FB0DA2E12E48F /* Pods_WeiboTests.framework */; };
716E9F0224E96288002CC6B8 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 716E9F0124E96288002CC6B8 /* AppDelegate.swift */; };
716E9F0424E96288002CC6B8 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 716E9F0324E96288002CC6B8 /* SceneDelegate.swift */; };
716E9F0724E96288002CC6B8 /* Weibo.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 716E9F0524E96288002CC6B8 /* Weibo.xcdatamodeld */; };
@ -19,9 +20,7 @@
716E9F3924EA9175002CC6B8 /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 716E9F3824EA9175002CC6B8 /* LoginView.swift */; };
716E9F4224EB077E002CC6B8 /* UserData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 716E9F4124EB077E002CC6B8 /* UserData.swift */; };
716E9F4424EB1E04002CC6B8 /* IndexView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 716E9F4324EB1E04002CC6B8 /* IndexView.swift */; };
97BE7BB5242B918349740EAA /* Pods_Weibo_WeiboUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED6C645A3A330D5FD1AF2A50 /* Pods_Weibo_WeiboUITests.framework */; };
B2D6AA87C9190CD30B3135FF /* Pods_Weibo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F15422B52F0F02E13AD0E33 /* Pods_Weibo.framework */; };
F5139582A166F6A46E7FE00D /* Pods_WeiboTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 71A8E074D25D3283ECB41611 /* Pods_WeiboTests.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -42,9 +41,9 @@
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
11A13FDA013FB0DA2E12E48F /* Pods_WeiboTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_WeiboTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
27B0BA649924BF20ED711CE6 /* Pods-Weibo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Weibo.debug.xcconfig"; path = "Target Support Files/Pods-Weibo/Pods-Weibo.debug.xcconfig"; sourceTree = "<group>"; };
4F159CB7E5D72ECAE978040C /* Pods-WeiboTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WeiboTests.debug.xcconfig"; path = "Target Support Files/Pods-WeiboTests/Pods-WeiboTests.debug.xcconfig"; sourceTree = "<group>"; };
52A3230AEB68E2160CACEE3B /* Pods-Weibo-WeiboUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Weibo-WeiboUITests.debug.xcconfig"; path = "Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests.debug.xcconfig"; sourceTree = "<group>"; };
6808829B1FA2E4D6EA25A6AA /* Pods-WeiboTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WeiboTests.release.xcconfig"; path = "Target Support Files/Pods-WeiboTests/Pods-WeiboTests.release.xcconfig"; sourceTree = "<group>"; };
716E9EFE24E96288002CC6B8 /* Weibo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Weibo.app; sourceTree = BUILT_PRODUCTS_DIR; };
716E9F0124E96288002CC6B8 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
716E9F0324E96288002CC6B8 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
@ -64,12 +63,9 @@
716E9F3B24EABF1D002CC6B8 /* Weibo-Brigding-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Weibo-Brigding-Header.h"; sourceTree = "<group>"; };
716E9F4124EB077E002CC6B8 /* UserData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserData.swift; sourceTree = "<group>"; };
716E9F4324EB1E04002CC6B8 /* IndexView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IndexView.swift; sourceTree = "<group>"; };
71A8E074D25D3283ECB41611 /* Pods_WeiboTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_WeiboTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
85DA2BE64DE6AE03B4ED4FDA /* Pods-WeiboTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WeiboTests.release.xcconfig"; path = "Target Support Files/Pods-WeiboTests/Pods-WeiboTests.release.xcconfig"; sourceTree = "<group>"; };
8F15422B52F0F02E13AD0E33 /* Pods_Weibo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Weibo.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A93D652806DBF9E6B1869122 /* Pods-Weibo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Weibo.release.xcconfig"; path = "Target Support Files/Pods-Weibo/Pods-Weibo.release.xcconfig"; sourceTree = "<group>"; };
B6D5E506B996FB683A8222CD /* Pods-Weibo-WeiboUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Weibo-WeiboUITests.release.xcconfig"; path = "Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests.release.xcconfig"; sourceTree = "<group>"; };
ED6C645A3A330D5FD1AF2A50 /* Pods_Weibo_WeiboUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Weibo_WeiboUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
E143BB38B1A06B9A110C6910 /* Pods-WeiboTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WeiboTests.debug.xcconfig"; path = "Target Support Files/Pods-WeiboTests/Pods-WeiboTests.debug.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -85,7 +81,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
F5139582A166F6A46E7FE00D /* Pods_WeiboTests.framework in Frameworks */,
43F5631C74EF810F4F999A66 /* Pods_WeiboTests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -93,7 +89,6 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
97BE7BB5242B918349740EAA /* Pods_Weibo_WeiboUITests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -104,8 +99,7 @@
isa = PBXGroup;
children = (
8F15422B52F0F02E13AD0E33 /* Pods_Weibo.framework */,
ED6C645A3A330D5FD1AF2A50 /* Pods_Weibo_WeiboUITests.framework */,
71A8E074D25D3283ECB41611 /* Pods_WeiboTests.framework */,
11A13FDA013FB0DA2E12E48F /* Pods_WeiboTests.framework */,
);
name = Frameworks;
sourceTree = "<group>";
@ -115,10 +109,8 @@
children = (
27B0BA649924BF20ED711CE6 /* Pods-Weibo.debug.xcconfig */,
A93D652806DBF9E6B1869122 /* Pods-Weibo.release.xcconfig */,
52A3230AEB68E2160CACEE3B /* Pods-Weibo-WeiboUITests.debug.xcconfig */,
B6D5E506B996FB683A8222CD /* Pods-Weibo-WeiboUITests.release.xcconfig */,
4F159CB7E5D72ECAE978040C /* Pods-WeiboTests.debug.xcconfig */,
85DA2BE64DE6AE03B4ED4FDA /* Pods-WeiboTests.release.xcconfig */,
E143BB38B1A06B9A110C6910 /* Pods-WeiboTests.debug.xcconfig */,
6808829B1FA2E4D6EA25A6AA /* Pods-WeiboTests.release.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
@ -217,10 +209,12 @@
isa = PBXNativeTarget;
buildConfigurationList = 716E9F2E24E9628A002CC6B8 /* Build configuration list for PBXNativeTarget "WeiboTests" */;
buildPhases = (
1B19AD59759419320989E8A3 /* [CP] Check Pods Manifest.lock */,
351AAC7122D098C89346677C /* [CP] Check Pods Manifest.lock */,
716E9F1324E9628A002CC6B8 /* Sources */,
716E9F1424E9628A002CC6B8 /* Frameworks */,
716E9F1524E9628A002CC6B8 /* Resources */,
F91FC61990042ACF7355D4DD /* [CP] Embed Pods Frameworks */,
57E82A579C10BF110CDE31A3 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@ -236,12 +230,9 @@
isa = PBXNativeTarget;
buildConfigurationList = 716E9F3124E9628A002CC6B8 /* Build configuration list for PBXNativeTarget "WeiboUITests" */;
buildPhases = (
8E8D481EC569432345ED04C4 /* [CP] Check Pods Manifest.lock */,
716E9F1E24E9628A002CC6B8 /* Sources */,
716E9F1F24E9628A002CC6B8 /* Frameworks */,
716E9F2024E9628A002CC6B8 /* Resources */,
B9276B6A88F11D529CDFBCBA /* [CP] Copy Pods Resources */,
39D33A5693AE986FBEAB8EB0 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@ -324,7 +315,7 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
1B19AD59759419320989E8A3 /* [CP] Check Pods Manifest.lock */ = {
351AAC7122D098C89346677C /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@ -346,21 +337,21 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
39D33A5693AE986FBEAB8EB0 /* [CP] Embed Pods Frameworks */ = {
57E82A579C10BF110CDE31A3 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
"${PODS_ROOT}/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
"${PODS_ROOT}/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests-frameworks.sh\"\n";
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-resources.sh\"\n";
showEnvVarsInLog = 0;
};
7145F80BFC5BEFC6A40A97DE /* [CP] Embed Pods Frameworks */ = {
@ -380,28 +371,6 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Weibo/Pods-Weibo-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
8E8D481EC569432345ED04C4 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Weibo-WeiboUITests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
96109A5B982E09A46A711B78 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@ -424,38 +393,38 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
B9276B6A88F11D529CDFBCBA /* [CP] Copy Pods Resources */ = {
BEC5486D9CD1E093CD3179AA /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests-resources-${CONFIGURATION}-input-files.xcfilelist",
"${PODS_ROOT}/Target Support Files/Pods-Weibo/Pods-Weibo-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests-resources-${CONFIGURATION}-output-files.xcfilelist",
"${PODS_ROOT}/Target Support Files/Pods-Weibo/Pods-Weibo-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Weibo-WeiboUITests/Pods-Weibo-WeiboUITests-resources.sh\"\n";
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Weibo/Pods-Weibo-resources.sh\"\n";
showEnvVarsInLog = 0;
};
BEC5486D9CD1E093CD3179AA /* [CP] Copy Pods Resources */ = {
F91FC61990042ACF7355D4DD /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Weibo/Pods-Weibo-resources-${CONFIGURATION}-input-files.xcfilelist",
"${PODS_ROOT}/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Weibo/Pods-Weibo-resources-${CONFIGURATION}-output-files.xcfilelist",
"${PODS_ROOT}/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Weibo/Pods-Weibo-resources.sh\"\n";
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-WeiboTests/Pods-WeiboTests-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
@ -650,6 +619,7 @@
);
PRODUCT_BUNDLE_IDENTIFIER = org.demo.Weibo;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Weibo/Weibo-Brigding-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
@ -671,6 +641,7 @@
);
PRODUCT_BUNDLE_IDENTIFIER = org.demo.Weibo;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Weibo/Weibo-Brigding-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
@ -678,7 +649,7 @@
};
716E9F2F24E9628A002CC6B8 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 4F159CB7E5D72ECAE978040C /* Pods-WeiboTests.debug.xcconfig */;
baseConfigurationReference = E143BB38B1A06B9A110C6910 /* Pods-WeiboTests.debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
@ -700,7 +671,7 @@
};
716E9F3024E9628A002CC6B8 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 85DA2BE64DE6AE03B4ED4FDA /* Pods-WeiboTests.release.xcconfig */;
baseConfigurationReference = 6808829B1FA2E4D6EA25A6AA /* Pods-WeiboTests.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
@ -722,7 +693,6 @@
};
716E9F3224E9628A002CC6B8 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 52A3230AEB68E2160CACEE3B /* Pods-Weibo-WeiboUITests.debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
@ -742,7 +712,6 @@
};
716E9F3324E9628A002CC6B8 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = B6D5E506B996FB683A8222CD /* Pods-Weibo-WeiboUITests.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;

@ -3,4 +3,38 @@
uuid = "9139D2A3-932A-46FE-B7F4-027323B448BA"
type = "0"
version = "2.0">
<Breakpoints>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "9FABDFDE-B9D8-48F0-B5D0-5DCD4C2A0E17"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Weibo/AppDelegate.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "25"
endingLineNumber = "25"
landmarkName = "didReceiveWeiboResponse(_:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "D69CB787-5F8B-4855-A65B-395213D2A2AA"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Weibo/LoginView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "39"
endingLineNumber = "39"
landmarkName = "loadUserInfo()"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints>
</Bucket>

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<VariablesViewState
version = "1.0">
<ContextStates>
<ContextState
contextName = "IndexView.loadContent():IndexView.swift">
</ContextState>
<ContextState
contextName = "closure #1 in LoginView.loadUserInfo():LoginView.swift">
</ContextState>
<ContextState
contextName = "closure #1 in LoginView.body.getter:LoginView.swift">
</ContextState>
<ContextState
contextName = "AppDelegate.didReceiveWeiboResponse(_:):AppDelegate.swift">
</ContextState>
<ContextState
contextName = "closure #1 in IndexView.loadContent():IndexView.swift">
</ContextState>
</ContextStates>
</VariablesViewState>

@ -10,7 +10,7 @@ import UIKit
import CoreData
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate,WeiboSDKDelegate {
class AppDelegate: UIResponder, UIApplicationDelegate,WeiboSDKDelegate,WBHttpRequestDelegate {
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return WeiboSDK.handleOpen(url, delegate: self)
@ -30,6 +30,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate,WeiboSDKDelegate {
user.access_token=res.accessToken
user.refresh_token=res.refreshToken
user.uid=res.userID
user.expiration_Date=res.expirationDate.timeIntervalSince1970
self.saveContext()
}
}

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "comment.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 624 B

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "like.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 897 B

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "loading.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "share.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 907 B

@ -8,8 +8,9 @@
import SwiftUI
import AlamofireImage
import CoreData
import SwiftyJSON
import Alamofire
struct ButtonView:View{
var title:String
var action:() -> Void
@ -213,7 +214,7 @@ struct TopView:View {
}
struct ImageView:View {
@Binding var imageUrl:String
var imageUrl:String
var body: some View{
Image(uiImage: requestImage(url: imageUrl))
}
@ -227,28 +228,184 @@ struct ImageView:View {
}
}
struct Content {
}
struct RowView:View {
var content:Content
var body: some View{
HStack{
Text("vvv")
VStack {
HStack{
ImageView(imageUrl:self.content.user.headUrl)
.frame(width: 60.0, height: 60.0)
.clipShape(/*@START_MENU_TOKEN@*/Circle()/*@END_MENU_TOKEN@*/)
VStack(alignment: .leading){
Text(self.content.user.name)
Text("\(self.content.created_at) 来自 weibo....")
.foregroundColor(Color.gray)
.padding(.top, 5.0)
}
.padding(.leading, 10.0)
Spacer()
}
.padding(.leading, 20.0)
Text(self.content.content)
.fontWeight(.bold)
.padding([.top, .leading, .trailing], 5.0)
.lineSpacing(/*@START_MENU_TOKEN@*/4.0/*@END_MENU_TOKEN@*/).lineLimit(5)
Text("")
HStack {
ForEach(self.content.picUrl, id: \.self){
url in
ImageView(imageUrl: url).onTapGesture(perform: {
print("url=\(url)")
})
}
}
Rectangle()
.frame(height: 1)
HStack {
Image("share")
Text(String(self.content.share))
.scaleEffect(/*@START_MENU_TOKEN@*/1.5/*@END_MENU_TOKEN@*/)
Spacer()
Image("comment")
Text(String(self.content.comment))
.scaleEffect(/*@START_MENU_TOKEN@*/1.5/*@END_MENU_TOKEN@*/)
Spacer()
Image("like")
Text(String(self.content.like))
.scaleEffect(/*@START_MENU_TOKEN@*/1.5/*@END_MENU_TOKEN@*/)
}
.padding(.horizontal, 10.0)
Rectangle()
.frame(height: 20.0)
.foregroundColor(Color(red: 219/255, green: 220/255, blue: 219/255, opacity: 1.0))
}
}
}
struct LoadView:View {
@State var angle:Double=0
var body: some View {
VStack {
Image("loading")
.rotationEffect(.degrees(self.angle))
.animation(
Animation.linear(duration:3)
.repeatForever(autoreverses: false)).onAppear(perform: {
self.angle=360
})
Text("正在加载中")
}
}
}
struct UserInfo{
var id:Int
var headUrl:String
var name:String
}
struct Content:Identifiable {
var id:Int
var user:UserInfo
var content:String
var share:Int
var comment:Int
var like:Int
var picUrl:[String]
var source:String
var created_at:String
}
struct IndexView: View {
@State var icon: String="arrowtop"
@Environment(\.managedObjectContext) var contenxt:NSManagedObjectContext
@EnvironmentObject var user:User
@State var statuses:[Content]=[]
let queue=OperationQueue()
@State var angle:Double=0
func tansformDate(dateStr:String)->String{
let formatter = DateFormatter()
formatter.dateFormat = "EEEE MMM dd HH:mm:ss zzz yyyy"
let datestr = formatter.date(from: dateStr)
let unix=datestr?.timeIntervalSince1970
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let date = Date(timeIntervalSince1970: unix!)
return formatter.string(from: date)
}
func loadContent(){
if let access_token=self.user.access_token{
print("加载用户\(String(describing: self.user.uid))关注用户的最新微博")
AF.request("https://api.weibo.com/2/statuses/friends_timeline.json",parameters: ["access_token":access_token]).responseJSON { response in
if let data=response.data,let json = try? JSON(data: data){
if let statuses = json["statuses"].array {
self.statuses.removeAll()
for statuse in statuses{
if let id = statuse["user"]["id"].int,
let headUrl=statuse["user"]["avatar_hd"].string,
let name=statuse["user"]["name"].string,
let statuse_id=statuse["id"].int,
let content=statuse["text"].string,
let source=statuse["source"].string,
let share=statuse["reposts_count"].int,
let comment=statuse["comments_count"].int,
let like=statuse["attitudes_count"].int,
let pic_urls=statuse["pic_urls"].array,
let created_at=statuse["created_at"].string
{
let obj=Content(id: statuse_id, user: UserInfo(id: id, headUrl: headUrl, name: name), content: content, share: share, comment: comment, like: like, picUrl: pic_urls.map({ json in
json["thumbnail_pic"].stringValue
}),source: source,created_at: self.tansformDate(dateStr: created_at))
self.statuses.append(obj)
}
}
print("解析\(self.statuses.count)条微博数据")
}else{
print("loadUserInfo error")
}
}
}
}else{
print("加载公共微博")
}
}
var body: some View {
VStack {
TopView(icon: $icon)
// RowView()
Spacer()
TopView(icon: $icon).onAppear(perform: {
self.loadContent()
})
if self.statuses.count>0{
List(self.statuses){
data in
RowView(content: data)
}
}else{
Spacer()
LoadView()
Spacer()
}
}
}
}

@ -8,8 +8,11 @@
import SwiftUI
import CoreData
import SwiftyJSON
import Alamofire
struct UserProfile {
var name:String?
}
struct LoginView: View {
@ -17,24 +20,50 @@ struct LoginView: View {
@EnvironmentObject var user:User
@State var userInfo=UserProfile()
let queue=OperationQueue()
func login() {
let request=WBAuthorizeRequest()
request.redirectURI="https://api.weibo.com/oauth2/default.html"
WeiboSDK.send(request)
}
func loadUserInfo(){
print("toekn=\(self.user.access_token),date=\(self.user.expiration_Date)")
AF.request("https://api.weibo.com/2/users/show.json",parameters: ["access_token":self.user.access_token,"uid":self.user.uid]).responseJSON { response in
if let data=response.data,let json = try? JSON(data: data){
print(json)
}else{
print("loadUserInfo error")
}
}
}
var body: some View {
VStack {
if (self.$user.uid.wrappedValue != nil){
Text("uid=\(self.$user.uid.wrappedValue!)")
}else{
Button(action: {
if self.user.access_token==nil{
Text("正在跳转到授权页面").onAppear(perform: {
self.login()
}) {
Text("跳转到授权登陆页面")
}
})
}
else if self.user.expiration_Date<Date().timeIntervalSince1970{
Text("正在跳转到授权页面").onAppear(perform: {
self.login()
})
}
else if self.userInfo.name==nil{
Text("正在获取用户信息").onAppear(perform: {
self.loadUserInfo()
})
}else{
Text("username=\(self.userInfo.name!)")
}
}
}

@ -2,10 +2,11 @@
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="16119" systemVersion="19G73" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
<entity name="User" representedClassName=".User" syncable="YES" codeGenerationType="class">
<attribute name="access_token" optional="YES" attributeType="String"/>
<attribute name="expiration_Date" optional="YES" attributeType="Double" defaultValueString="0" usesScalarValueType="YES"/>
<attribute name="refresh_token" optional="YES" attributeType="String"/>
<attribute name="uid" optional="YES" attributeType="String"/>
</entity>
<elements>
<element name="User" positionX="-63" positionY="-18" width="128" height="88"/>
<element name="User" positionX="-63" positionY="-18" width="128" height="103"/>
</elements>
</model>

@ -7,7 +7,6 @@
//
import XCTest
@testable import Weibo
class WeiboTests: XCTestCase {
@ -22,6 +21,7 @@ class WeiboTests: XCTestCase {
func testExample() throws {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
func testPerformanceExample() throws {

Loading…
Cancel
Save