- 接口联调

- UI调整
This commit is contained in:
linshujie 2026-09-03 18:05:04 +08:00
parent e0e5dc76fd
commit 8b0976cdf6
226 changed files with 5143 additions and 970 deletions

View File

@ -88,6 +88,15 @@ enum AppRestrictTokenCodec {
try? PropertyListDecoder().decode(ApplicationToken.self, from: data)
}
static func decodeBase64(_ value: String) -> ApplicationToken? {
let text = value.trimmingCharacters(in: .whitespacesAndNewlines)
guard !text.isEmpty,
let data = Data(base64Encoded: text, options: .ignoreUnknownCharacters) else {
return nil
}
return decode(data)
}
static func encodeSelection(_ selection: FamilyActivitySelection) -> Data? {
try? PropertyListEncoder().encode(selection)
}
@ -202,6 +211,22 @@ enum AppRestrictSharedStore {
links = links.filter { $0.tokenData != data }
}
static var hasPairingData: Bool {
let storedSelection = selection
return !storedSelection.applicationTokens.isEmpty
|| !storedSelection.categoryTokens.isEmpty
|| !storedSelection.webDomainTokens.isEmpty
|| !enabledTokens.isEmpty
|| !links.isEmpty
}
static func clearPairingData() {
selection = FamilyActivitySelection()
enabledTokens = []
links = []
clearShield()
}
static func applyShield(for tokens: Set<ApplicationToken>) {
let store = AppRestrictShared.makeStore()
if tokens.isEmpty {
@ -237,10 +262,15 @@ enum AppRestrictSharedStore {
}
}
static func loadShieldDisplayImage() -> UIImage? {
// icon 100pt 30 30
loadShieldImage()?.appRestrictShieldIcon(size: 100, cornerRadius: 30)
}
static func saveCustomImage(_ image: UIImage) -> Bool {
guard let url = AppRestrictShared.customImageURL else { return false }
let resized = image.appRestrictResized(maxSide: 720)
guard let data = resized.jpegData(compressionQuality: 0.82) else { return false }
guard let data = resized.pngData() else { return false }
do {
try data.write(to: url, options: .atomic)
return true
@ -250,7 +280,7 @@ enum AppRestrictSharedStore {
}
}
private extension UIImage {
extension UIImage {
func appRestrictResized(maxSide: CGFloat) -> UIImage {
let maxCurrent = max(size.width, size.height)
guard maxCurrent > maxSide, maxCurrent > 0 else { return self }
@ -261,4 +291,20 @@ private extension UIImage {
draw(in: CGRect(origin: .zero, size: newSize))
}
}
func appRestrictShieldIcon(size: CGFloat, cornerRadius: CGFloat) -> UIImage {
let canvas = CGSize(width: size, height: size)
let format = UIGraphicsImageRendererFormat()
format.opaque = false
format.scale = UIScreen.main.scale
let renderer = UIGraphicsImageRenderer(size: canvas, format: format)
return renderer.image { _ in
let rect = CGRect(origin: .zero, size: canvas)
let path = UIBezierPath(roundedRect: rect, cornerRadius: cornerRadius)
path.addClip()
UIColor.white.setFill()
path.fill()
draw(in: rect)
}
}
}

View File

@ -342,6 +342,7 @@
55B218B13024B00100784722 /* FeatureIntroVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55B218B13024B00100784721 /* FeatureIntroVC.swift */; };
55B218B13024B00100784724 /* FeatureIntroView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55B218B13024B00100784723 /* FeatureIntroView.swift */; };
55B219A2302A000100784751 /* UnlockRequestPopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55B219A1302A000100784750 /* UnlockRequestPopView.swift */; };
55B250023050000100784902 /* LockedAppPopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55B250013050000100784901 /* LockedAppPopView.swift */; };
55B219B2302A000100784761 /* ReceiveMessagePopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55B219B1302A000100784760 /* ReceiveMessagePopView.swift */; };
55B219B4302A000100784763 /* ReceiveMessageReportPopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55B219B3302A000100784762 /* ReceiveMessageReportPopView.swift */; };
55B219C13024C00100784722 /* BubbleHeroView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55B219C13024C00100784721 /* BubbleHeroView.swift */; };
@ -787,6 +788,7 @@
55B218B13024B00100784721 /* FeatureIntroVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureIntroVC.swift; sourceTree = "<group>"; };
55B218B13024B00100784723 /* FeatureIntroView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureIntroView.swift; sourceTree = "<group>"; };
55B219A1302A000100784750 /* UnlockRequestPopView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnlockRequestPopView.swift; sourceTree = "<group>"; };
55B250013050000100784901 /* LockedAppPopView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LockedAppPopView.swift; sourceTree = "<group>"; };
55B219B1302A000100784760 /* ReceiveMessagePopView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceiveMessagePopView.swift; sourceTree = "<group>"; };
55B219B3302A000100784762 /* ReceiveMessageReportPopView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceiveMessageReportPopView.swift; sourceTree = "<group>"; };
55B219C13024C00100784721 /* BubbleHeroView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BubbleHeroView.swift; sourceTree = "<group>"; };
@ -1324,6 +1326,7 @@
55B222000000000100784830 /* AddEmojiPopView.swift */,
55B222020000000100784832 /* AddMessagePopView.swift */,
55B219A1302A000100784750 /* UnlockRequestPopView.swift */,
55B250013050000100784901 /* LockedAppPopView.swift */,
55B219B1302A000100784760 /* ReceiveMessagePopView.swift */,
55B219B3302A000100784762 /* ReceiveMessageReportPopView.swift */,
55B217C23022F0A000784722 /* MemberPhoneReportView.swift */,
@ -2502,6 +2505,7 @@
30EFF3A82FD7C6A400EB35D4 /* GroupSettingViewModel.swift in Sources */,
55B2179130217D6600784774 /* HomeView2.swift in Sources */,
55B219A2302A000100784751 /* UnlockRequestPopView.swift in Sources */,
55B250023050000100784902 /* LockedAppPopView.swift in Sources */,
55B219B2302A000100784761 /* ReceiveMessagePopView.swift in Sources */,
55B219B4302A000100784763 /* ReceiveMessageReportPopView.swift in Sources */,
55B219C2302A000100784771 /* PigeonMessageVC.swift in Sources */,

View File

@ -148,7 +148,10 @@ enum GatewayStatusCode: Int {
case noAuthority = 500
//
case review = 201
/** ============== ============== */
// vip
case needVip = 20000
//
case groupLimit = 20009

View File

@ -34,6 +34,42 @@ enum UserAPI {
/// 使
case phoneUsageReport(userId: String, groupKey: String)
///
case phoneUsageTrips(userId: String, date: Int64)
///
case queryPhoneUsageIcon(package: String)
///
case savePhoneUsageIcon(package: String, icon: String)
///
case phoneLockApp(token: String, icon: String)
///
case phoneLockApps(userId: String, groupKey: String)
/// token
case phoneLockAppsDelete(os: String, tokens: [String])
///
case phoneLock(os: String, groupKey: String, userId: String, tokens: [String], iconIndex: Int, message: String)
///
case phoneLocked(os: String)
///
case requestPhoneUnlock(os: String, groupKey: String, tokens: [String])
///
case phoneUnlockRequests(os: String)
///
case phoneUnlock(os: String, groupKey: String, userId: String, tokens: [String])
/// 线
case phoneUnlockAllow(os: String)
/// IM Token
case imToken
@ -43,8 +79,10 @@ enum UserAPI {
///
case changePhone(timestamp: String, phone: String, code: String)
///
case setHeadPic(index: Int)
/// URL
case setHeadPic(headPic: String)
case changeAvater(url: String)
///
case setNickName(nick: String)
@ -116,11 +154,31 @@ extension UserAPI: MultiTargetProtocol {
return "mapi/phone/usage/period"
case .phoneUsageReport:
return "mapi/phone/usage/report"
case .phoneUsageTrips:
return "mapi/phone/usage/trips"
case .queryPhoneUsageIcon, .savePhoneUsageIcon:
return "mapi/phone/usage/icon"
case .phoneLockApp:
return "mapi/phone/lock/app"
case .phoneLockApps:
return "mapi/phone/lock/apps"
case .phoneLockAppsDelete:
return "mapi/phone/lock/apps/delete"
case .phoneLock:
return "mapi/phone/lock"
case .phoneLocked:
return "mapi/phone/locked"
case .requestPhoneUnlock, .phoneUnlockRequests:
return "mapi/phone/unlock/request"
case .phoneUnlock:
return "mapi/phone/unlock"
case .phoneUnlockAllow:
return "mapi/phone/unlock/allow"
case .imToken:
return "mapi/openim/user/token/get"
case .signInInfo:
return "mapi/user/signin"
case .changePhone:
case .changePhone, .changeAvater:
return "api/user"
case .setHeadPic:
return "mapi/user/setheadpic"
@ -129,7 +187,7 @@ extension UserAPI: MultiTargetProtocol {
case .setMood:
return "mapi/user/setmood"
case .setGender:
return "api/user"
return "mapi/user/setsex"
case .emergencyContact:
return "mapi/user/emergencycontact"
case .deleteAccount:
@ -155,9 +213,9 @@ extension UserAPI: MultiTargetProtocol {
var method: Moya.Method {
switch self {
case .userInfo, .userStatus, .phoneUsageToday, .phoneUsagePeriod, .phoneUsageReport, .signInInfo, .notice, .followList, .relations:
case .userInfo, .userStatus, .phoneUsageToday, .phoneUsagePeriod, .phoneUsageReport, .phoneUsageTrips, .queryPhoneUsageIcon, .phoneLockApps, .phoneLocked, .phoneUnlockRequests, .phoneUnlockAllow, .signInInfo, .notice, .followList, .relations:
return .get
case .changePhone, .setGender:
case .changePhone, .setGender, .changeAvater:
return .put
case .deleteAccount:
return .delete
@ -203,6 +261,104 @@ extension UserAPI: MultiTargetProtocol {
]
return .requestParameters(parameters: params, encoding: URLEncoding.queryString)
case let .phoneUsageTrips(userId, date):
let params: Parameters = [
"user_id": userId,
"date": NSNumber(value: date),
"simplify": "true",
"include_events": "false"
]
return .requestParameters(parameters: params, encoding: URLEncoding.queryString)
case let .queryPhoneUsageIcon(package):
return .requestParameters(parameters: ["package": package], encoding: URLEncoding.queryString)
case let .savePhoneUsageIcon(package, icon):
return .requestParameters(
parameters: ["package": package, "icon": icon],
encoding: JSONEncoding()
)
case let .phoneLockApp(token, icon):
return .requestParameters(
parameters: [
"os": "ios",
"token": token,
"icon": icon
],
encoding: JSONEncoding()
)
case let .phoneLockApps(userId, groupKey):
return .requestParameters(
parameters: [
"user_id": userId,
"group_key": groupKey
],
encoding: URLEncoding.queryString
)
case let .phoneLockAppsDelete(os, tokens):
return .requestParameters(
parameters: [
"os": os,
"token": tokens
],
encoding: JSONEncoding()
)
case let .phoneLock(os, groupKey, userId, tokens, iconIndex, message):
return .requestParameters(
parameters: [
"os": os,
"group_key": groupKey,
"user_id": userId,
"token": tokens,
"icon_index": iconIndex,
"message": message
],
encoding: JSONEncoding()
)
case let .phoneLocked(os):
return .requestParameters(
parameters: ["os": os],
encoding: URLEncoding.queryString
)
case let .requestPhoneUnlock(os, groupKey, tokens):
return .requestParameters(
parameters: [
"os": os,
"group_key": groupKey,
"token": tokens
],
encoding: JSONEncoding()
)
case let .phoneUnlockRequests(os):
return .requestParameters(
parameters: ["os": os],
encoding: URLEncoding.queryString
)
case let .phoneUnlock(os, groupKey, userId, tokens):
return .requestParameters(
parameters: [
"os": os,
"group_key": groupKey,
"user_id": userId,
"token": tokens
],
encoding: JSONEncoding()
)
case let .phoneUnlockAllow(os):
return .requestParameters(
parameters: ["os": os],
encoding: URLEncoding.queryString
)
case .imToken:
var params = Parameters()
params["platform_id"] = 1
@ -212,6 +368,11 @@ extension UserAPI: MultiTargetProtocol {
case .signInInfo:
return .requestParameters(parameters: Parameters(), encoding: URLEncoding())
case let .changeAvater(url):
var params = Parameters()
params["avater"] = url
return .requestParameters(parameters: params, encoding: JSONEncoding())
case let .changePhone(timestamp, phone, code):
var params = Parameters()
params["phone_timestamp"] = timestamp
@ -219,9 +380,9 @@ extension UserAPI: MultiTargetProtocol {
params["phone_code"] = code
return .requestParameters(parameters: params, encoding: JSONEncoding())
case let .setHeadPic(index):
case let .setHeadPic(headPic):
var params = Parameters()
params["head_pic_index"] = index
params["head_pic_index"] = headPic
return .requestParameters(parameters: params, encoding: JSONEncoding())
case let .setNickName(nick):

View File

@ -26,6 +26,10 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
setupLocation()
ApiManager.shared.setup()
AppRouter.shared.setup()
AppUnlockCoordinator.shared.start()
if #available(iOS 16.0, *) {
AppRestrictManager.shared.startPermissionMonitoring()
}
return true
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 B

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 189 B

After

Width:  |  Height:  |  Size: 197 KiB

View File

@ -0,0 +1,9 @@
{
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"provides-namespace" : true
}
}

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 623 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 632 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 817 B

View File

@ -0,0 +1,8 @@
{
"images" : [
{ "idiom" : "universal", "scale" : "1x" },
{ "filename" : "进度条-圆@2x.png", "idiom" : "universal", "scale" : "2x" },
{ "filename" : "进度条-圆@3x.png", "idiom" : "universal", "scale" : "3x" }
],
"info" : { "author" : "xcode", "version" : 1 }
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 471 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

@ -5,12 +5,12 @@
"scale" : "1x"
},
{
"filename" : "Group_1483@2x.png",
"filename" : "组 48328@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Group_1483@3x.png",
"filename" : "组 48328@3x.png",
"idiom" : "universal",
"scale" : "3x"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -5,12 +5,12 @@
"scale" : "1x"
},
{
"filename" : "Group_1482@2x.png",
"filename" : "蒙版组 13953@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Group_1482@3x.png",
"filename" : "蒙版组 13953@3x.png",
"idiom" : "universal",
"scale" : "3x"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 898 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

View File

@ -5,12 +5,12 @@
"scale": "1x"
},
{
"filename" : "Frame_16@2x.png",
"filename": "1@2x.png",
"idiom": "universal",
"scale": "2x"
},
{
"filename" : "Frame_16@3x.png",
"filename": "1@3x.png",
"idiom": "universal",
"scale": "3x"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

View File

@ -5,12 +5,12 @@
"scale": "1x"
},
{
"filename" : "Frame_20@2x.png",
"filename": "10@2x.png",
"idiom": "universal",
"scale": "2x"
},
{
"filename" : "Frame_20@3x.png",
"filename": "10@3x.png",
"idiom": "universal",
"scale": "3x"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

View File

@ -5,12 +5,12 @@
"scale": "1x"
},
{
"filename" : "Frame_21@2x.png",
"filename": "11@2x.png",
"idiom": "universal",
"scale": "2x"
},
{
"filename" : "Frame_21@3x.png",
"filename": "11@3x.png",
"idiom": "universal",
"scale": "3x"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

View File

@ -5,12 +5,12 @@
"scale" : "1x"
},
{
"filename" : "Frame_22@2x.png",
"filename" : "12@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Frame_22@3x.png",
"filename" : "12@3x.png",
"idiom" : "universal",
"scale" : "3x"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

View File

@ -5,12 +5,12 @@
"scale": "1x"
},
{
"filename" : "Frame_23@2x.png",
"filename": "13@2x.png",
"idiom": "universal",
"scale": "2x"
},
{
"filename" : "Frame_23@3x.png",
"filename": "13@3x.png",
"idiom": "universal",
"scale": "3x"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

View File

@ -5,12 +5,12 @@
"scale": "1x"
},
{
"filename" : "Frame_24@2x.png",
"filename": "14@2x.png",
"idiom": "universal",
"scale": "2x"
},
{
"filename" : "Frame_24@3x.png",
"filename": "14@3x.png",
"idiom": "universal",
"scale": "3x"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Some files were not shown because too many files have changed in this diff Show More