This commit is contained in:
忆海16 2024-07-15 11:52:15 +08:00
commit 6ca0dd91a2
528 changed files with 13529 additions and 0 deletions

41
Podfile Normal file
View File

@ -0,0 +1,41 @@
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'anniversary_Project' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
pod 'SnapKit'
#pod 'AFNetworking'
pod 'SDWebImage/WebP'
pod 'IQKeyboardManagerSwift'
pod 'BRPickerView'
pod 'Alamofire'
pod "ESTabBarController-swift"
pod 'RAMAnimatedTabBarController'
pod 'MJExtension'
pod 'MJRefresh'
pod 'WCDB.swift'
pod 'FSCalendar'
pod 'SVProgressHUD'
pod 'AppLovinSDK'
pod 'AppLovinDSPLinkedInAdapter'
pod 'AppLovinMediationVungleAdapter'
pod 'AppLovinMediationByteDanceAdapter'
pod 'Firebase/Core'
pod 'Firebase/AnalyticsWithoutAdIdSupport'
pod 'FirebaseRemoteConfig'
post_install do |installer|
installer.generated_projects.each do |project|
project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
end
end
end
end
end

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,619 @@
//
// AV_AddVC.swift
// anniversary_Project
//
// Created by 16 on 2024/4/15.
//
import UIKit
import BRPickerView
import Photos
import SVProgressHUD
import WCDBSwift
//import FirebaseAnalytics
import AppLovinSDK
import Alamofire
import FirebaseRemoteConfig
class AV_AddVC: AV_RootVC {
@IBOutlet weak var scheduleImagV: UIImageView!
@IBOutlet weak var schedLabel: UILabel!
@IBOutlet weak var birthdayImagV: UIImageView!
@IBOutlet weak var birthdayLabel: UILabel!
@IBOutlet weak var memoryImagV: UIImageView!
@IBOutlet weak var memoryLabel: UILabel!
@IBOutlet weak var titleLabel: UITextField!
@IBOutlet weak var datetextF: UITextField!
@IBOutlet weak var switchSelect: UISwitch!
@IBOutlet weak var deleteBtn: UIButton!
@IBOutlet weak var cameraImagV: UIImageView!
@IBOutlet weak var scheduleV: UIView!
@IBOutlet weak var birthdayV: UIView!
@IBOutlet weak var memoryV: UIView!
var type:String = "Schedule"
var isremind:Bool = true
var model:UserModel?
var typeedit:Int = 0
var dataUpdateClosure: ((UserModel) -> Void)?
var interstitialAd: MAInterstitialAd!
var remoteConfig: RemoteConfig!
var isadshow:Bool = false
var retryAttempt = 0.0
override func viewDidLoad() {
super.viewDidLoad()
cameraImagV.layer.cornerRadius = 8
cameraImagV.clipsToBounds = true
cameraImagV.isUserInteractionEnabled = true
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(imageTouch))
cameraImagV.addGestureRecognizer(tapGesture)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.createInterstitialAd()
remoteConfig = RemoteConfig.remoteConfig()
//
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 0
remoteConfig.configSettings = settings
// Fetch
remoteConfig.setDefaults(fromPlist: "isopen")
fetchRemoteConfig()
if typeedit == 0{
self.cameraImagV.image = UIImage(named: "camera")
}else{
self.titleLabel.text = model?.name
self.datetextF.text = model?.date
self.switchSelect.isOn = ((model?.notificationEnabled) != nil)
let image = model?.getImage()
self.cameraImagV.image = image
}
self.scheduleImagV.image = UIImage(named: "schedule_s")
self.schedLabel.alpha = 1.0
self.birthdayImagV.image = UIImage(named: "birthday_n")
self.birthdayLabel.alpha = 0.5
self.memoryImagV.image = UIImage(named: "memor_n")
self.memoryLabel.alpha = 0.5
scheduleV.layer.cornerRadius = 8
scheduleV.layer.borderWidth = 1
scheduleV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
scheduleV.backgroundColor = .white
birthdayV.layer.cornerRadius = 8
birthdayV.layer.borderWidth = 0
birthdayV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
birthdayV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1)
memoryV.layer.cornerRadius = 8
memoryV.layer.borderWidth = 0
memoryV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
memoryV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1)
if self.cameraImagV.image == UIImage(named: "camera"){
self.deleteBtn.isHidden = true
}else{
self.deleteBtn.isHidden = false
}
}
@IBAction func back(_ sender: Any) {
if self.typeedit == 0{
self.dismiss(animated: true)
}else{
self.navigationController?.popViewController(animated: true)
}
}
@IBAction func sure(_ sender: Any) {
if let title = self.titleLabel.text, title.count > 0 && title.count <= 50 {
if self.datetextF.text!.count != 0{
if cameraImagV.image != UIImage(named: "camera"){
// print("---")
if self.typeedit == 0{
let user = UserModel()
let uuid = UUID()
user.uid = uuid.uuidString
user.name = self.titleLabel.text!
user.date = self.datetextF.text!
user.notificationEnabled = self.isremind
user.type = self.type
user.setImage(image: self.cameraImagV.image!)
PrWCDBBaseManager.shared.insertToDb(objects: [user], intoTable: userModelTableName)
self.titleLabel.text = ""
self.datetextF.text = ""
self.cameraImagV.image = UIImage(named: "camera")
self.deleteBtn.isHidden = true
SVProgressHUD.showSuccess(withStatus: "Added successfully")
DispatchQueue.global().asyncAfter(wallDeadline: .now() + 1.5) {
SVProgressHUD.dismiss()
}
if self.isadshow == true{
DispatchQueue.main.asyncAfter(wallDeadline: .now() + 0.5) {
if self.interstitialAd.isReady {
self.interstitialAd.show()
self.setPostSHOW()
}else{
self.dismiss(animated: true)
}
}
}else{
self.dismiss(animated: true)
}
}else{
let user = UserModel()
// let uuid = UUID()
user.uid = model!.uid
user.name = self.titleLabel.text!
user.date = self.datetextF.text!
user.notificationEnabled = self.isremind
user.type = self.type
user.setImage(image: self.cameraImagV.image!)
let condition: Condition = UserModel.Properties.uid == model!.uid
PrWCDBBaseManager.shared.updateToDb(table: userModelTableName, on: [UserModel.Properties.name,UserModel.Properties.date,UserModel.Properties.type,UserModel.Properties.notificationEnabled,UserModel.Properties.imageBase64], with: user, where: condition)
self.titleLabel.text = ""
self.datetextF.text = ""
self.cameraImagV.image = UIImage(named: "camera")
self.deleteBtn.isHidden = true
SVProgressHUD.showInfo(withStatus: "update completed")
DispatchQueue.global().asyncAfter(wallDeadline: .now() + 1.5) {
SVProgressHUD.dismiss()
}
self.navigationController?.popViewController(animated: true)
dataUpdateClosure?(user)
}
}else{
SVProgressHUD.showInfo(withStatus: "Please choose your commemorative picture")
DispatchQueue.global().asyncAfter(deadline: .now() + 1.5) {
SVProgressHUD.dismiss()
}
}
}else{
SVProgressHUD.showInfo(withStatus: "Please select anniversary date")
DispatchQueue.global().asyncAfter(deadline: .now() + 1.5) {
SVProgressHUD.dismiss()
}
}
} else {
SVProgressHUD.showInfo(withStatus: "Please enter a title within 30 characters")
DispatchQueue.global().asyncAfter(deadline: .now() + 1.5) {
SVProgressHUD.dismiss()
}
}
}
@objc func imageTouch(){
let imagePicker = UIImagePickerController()
imagePicker.sourceType = .photoLibrary
imagePicker.delegate = self
present(imagePicker, animated: true, completion: nil)
if self.cameraImagV.image == UIImage(named: "camera"){
self.deleteBtn.isHidden = true
}else{
self.deleteBtn.isHidden = false
}
}
@IBAction func dateSelect(_ sender: UIButton) {
titleLabel.resignFirstResponder()
let datePicker = BRDatePickerView()
datePicker.pickerMode = .YMD
datePicker.title = "Select Date"
datePicker.selectDate = Date()
datePicker.isAutoSelect = true // false
datePicker.resultBlock = { selectDate, selectValue in
print("选择的值:\(selectValue ?? "")")
self.datetextF.text = selectValue
}
let customestyle = BRPickerStyle()
customestyle.cancelBtnTitle = "Cancel"
customestyle.doneBtnTitle = "Sure"
datePicker.pickerStyle = customestyle
datePicker.show()
}
@IBAction func switchSele(_ sender: Any) {
if switchSelect.isOn {
print("Switch is ON")
self.isremind = true
} else {
print("Switch is OFF")
self.isremind = false
}
}
@IBAction func scheduleBtn(_ sender: UIButton) {
self.type = "Schedule"
self.scheduleImagV.image = UIImage(named: "schedule_s")
self.schedLabel.alpha = 1.0
self.birthdayImagV.image = UIImage(named: "birthday_n")
self.birthdayLabel.alpha = 0.5
self.memoryImagV.image = UIImage(named: "memor_n")
self.memoryLabel.alpha = 0.5
scheduleV.layer.cornerRadius = 8
scheduleV.layer.borderWidth = 1
scheduleV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
scheduleV.backgroundColor = .white
birthdayV.layer.cornerRadius = 8
birthdayV.layer.borderWidth = 0
birthdayV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
birthdayV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1)
memoryV.layer.cornerRadius = 8
memoryV.layer.borderWidth = 0
memoryV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
memoryV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1)
}
@IBAction func birthdatBtn(_ sender: UIButton) {
self.type = "Birthday"
self.scheduleImagV.image = UIImage(named: "schedule_n")
self.schedLabel.alpha = 0.5
self.birthdayImagV.image = UIImage(named: "birthday_s")
self.birthdayLabel.alpha = 1.0
self.memoryImagV.image = UIImage(named: "memor_n")
self.memoryLabel.alpha = 0.5
scheduleV.layer.cornerRadius = 8
scheduleV.layer.borderWidth = 0
scheduleV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
scheduleV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1)
birthdayV.layer.cornerRadius = 8
birthdayV.layer.borderWidth = 1
birthdayV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
birthdayV.backgroundColor = .white
memoryV.layer.cornerRadius = 8
memoryV.layer.borderWidth = 0
memoryV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
memoryV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1)
}
@IBAction func memoryBtn(_ sender: UIButton) {
self.type = "Memory"
self.scheduleImagV.image = UIImage(named: "schedule_n")
self.schedLabel.alpha = 0.5
self.birthdayImagV.image = UIImage(named: "birthday_n")
self.birthdayLabel.alpha = 0.5
self.memoryImagV.image = UIImage(named: "memor_S")
self.memoryLabel.alpha = 1.0
scheduleV.layer.cornerRadius = 8
scheduleV.layer.borderWidth = 0
scheduleV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
scheduleV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1)
birthdayV.layer.cornerRadius = 8
birthdayV.layer.borderWidth = 0
birthdayV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
birthdayV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1)
memoryV.layer.cornerRadius = 8
memoryV.layer.borderWidth = 1
memoryV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor
memoryV.backgroundColor = .white
}
@IBAction func btndelete(_ sender: UIButton) {
self.cameraImagV.image = UIImage(named: "camera")
self.deleteBtn.isHidden = true
}
///广
func fetchRemoteConfig() {
let localVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0"
remoteConfig.fetch{ (status, error) -> Void in
if status == .success {
print("Config fetched!")
self.remoteConfig.activate { changed, error in
if error == nil{
let js = self.remoteConfig.configValue(forKey: "isopen").jsonValue as! [String:Any]
let valueopen = js["isadopen"] as! Bool
let valueversion = js["version"] as! String
DispatchQueue.main.async {
if valueversion == localVersion{
self.isadshow = false
}else{
if valueopen {
self.isadshow = true
} else {
self.isadshow = false
}
}
}
}
}
} else {
print("Config not fetched")
if let error = error {
print("Error: \(error.localizedDescription)")
}
}
}
}
func setPostload(){
let url = "http://111.9.47.226:38080/top_selection/save_ad_load_log"
let parameters:[String : Any] = [
"deviceId": StartManager.shared.devicID ?? "",
"localIp": StartManager.shared.localIP ?? "",
"remoteIp": StartManager.shared.publicIP ?? "",
"linkId": "",
"packageName": "com.countdown.day.daycount",
"gaid": StartManager.shared.idfaid ?? "",
"dataId": "",
"shelfNumber":"日历添加和返回",
"succeed": StartManager.shared.succeed,
"loadTime": "",
"adPlatform": StartManager.shared.adPlatform ?? "",
"countryCode": StartManager.shared.countryCode ?? "",
"adId": StartManager.shared.adId ?? "",
"platformResponseTime": StartManager.shared.platformResponseTime ?? "",
"getIpResponseTime": StartManager.shared.getIpResponseTime ?? "",
"ecpm": StartManager.shared.ecpm ?? "",
"dsp": StartManager.shared.dsp ?? "",
"network": StartManager.shared.network ?? "",
"showStatus": 0,
"washParam": true,
]
let headers: HTTPHeaders = [
"Content-Type": "application/json"
]
NetworkManager.shared.postRequest(url: url, parameters: parameters, headers: headers) { result in
switch result {
case .success(let data):
print("Response:--- \(data)")
case .failure(let error):
print("Error:--- \(error)")
}
}
}
func setPostSHOW(){
let url = "http://111.9.47.226:38080/top_selection/save_ad_show_log"
let parameters:[String : Any] = [
"deviceId": StartManager.shared.devicID ?? "",
"localIp": StartManager.shared.localIP ?? "",
"remoteIp": StartManager.shared.publicIP ?? "",
"linkId": "",
"packageName": "com.countdown.day.daycount",
"gaid": StartManager.shared.idfaid ?? "",
"dataId": "",
"shelfNumber":"日历添加和返回",
"succeed": StartManager.shared.succeed,
"loadTime": "",
"adPlatform": StartManager.shared.adPlatform ?? "",
"countryCode": StartManager.shared.countryCode ?? "",
"adId": StartManager.shared.adId ?? "",
"platformResponseTime": StartManager.shared.platformResponseTime ?? "",
"getIpResponseTime": StartManager.shared.getIpResponseTime ?? "",
"ecpm": StartManager.shared.ecpm ?? "",
"dsp": StartManager.shared.dsp ?? "",
"network": StartManager.shared.network ?? "",
]
let headers: HTTPHeaders = [
"Content-Type": "application/json"
]
NetworkManager.shared.postRequest(url: url, parameters: parameters, headers: headers) { result in
switch result {
case .success(let data):
print("Response:--- \(data)")
case .failure(let error):
print("Error:--- \(error)")
}
}
}
}
extension AV_AddVC:UIImagePickerControllerDelegate, UINavigationControllerDelegate{
//
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
picker.dismiss(animated: true, completion: nil)
//
if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
// UserDefaults
// saveImageToUserDefaults(image, forKey: "selectedImage")
self.cameraImagV.image = image
// 便使
// saveImageToDocumentsDirectory(image)
if self.cameraImagV.image == UIImage(named: "camera"){
self.deleteBtn.isHidden = true
}else{
self.deleteBtn.isHidden = false
}
}
}
//
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true, completion: nil)
if self.cameraImagV.image == UIImage(named: "camera"){
self.deleteBtn.isHidden = true
}else{
self.deleteBtn.isHidden = false
}
}
}
extension AV_AddVC: MAAdDelegate
{
func createInterstitialAd()
{
interstitialAd = MAInterstitialAd(adUnitIdentifier: "8fccdfa964b52e26")
interstitialAd.delegate = self
// Load the first ad
interstitialAd.load()
}
// MARK: MAAdDelegate Protocol
func didLoad(_ ad: MAAd)
{
// Interstitial ad is ready to be shown. 'interstitialAd.isReady' will now return 'true'
// Reset retry attempt
retryAttempt = 0
StartManager.shared.succeed = true
// StartManager.shared.loadTime = self.adLoadTime
StartManager.shared.adPlatform = "MAX"
StartManager.shared.countryCode = ALSdk.shared().configuration.countryCode
StartManager.shared.adId = "8fccdfa964b52e26"
StartManager.shared.platformResponseTime = ad.requestLatency
StartManager.shared.ecpm = Float(ad.revenue)
StartManager.shared.dsp = ad.dspName
StartManager.shared.network = ad.networkName
setPostload()
}
func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError)
{
// Interstitial ad failed to load
// We recommend retrying with exponentially higher delays up to a maximum delay (in this case 64 seconds)
retryAttempt += 1
let delaySec = pow(2.0, min(6.0, retryAttempt))
DispatchQueue.main.asyncAfter(deadline: .now() + delaySec) {
self.interstitialAd.load()
}
}
func didDisplay(_ ad: MAAd)
{
// Pause your app's background audio
}
func didClick(_ ad: MAAd) {}
func didHide(_ ad: MAAd)
{
// Resume your app's background audio
// Interstitial ad is hidden. Pre-load the next ad
interstitialAd.load()
if self.typeedit == 0{
self.dismiss(animated: true)
}else{
self.navigationController?.popViewController(animated: true)
}
}
func didFail(toDisplay ad: MAAd, withError error: MAError)
{
// Interstitial ad failed to display. We recommend loading the next ad
interstitialAd.load()
}
}

View File

@ -0,0 +1,350 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="AV_AddVC" customModule="anniversary_Project" customModuleProvider="target">
<connections>
<outlet property="birthdayImagV" destination="weh-A8-M04" id="OmE-Oc-zNs"/>
<outlet property="birthdayLabel" destination="Mo8-JO-h27" id="E97-hR-ard"/>
<outlet property="birthdayV" destination="l4W-ml-uDs" id="pOH-Hf-XyE"/>
<outlet property="cameraImagV" destination="Vcq-pb-Wxe" id="GZ2-k1-pxt"/>
<outlet property="datetextF" destination="RDK-VK-JRm" id="btk-sV-tbp"/>
<outlet property="deleteBtn" destination="gZ1-5K-LH6" id="Vmz-tw-McX"/>
<outlet property="memoryImagV" destination="ynf-Vi-AZ0" id="ubC-57-JcF"/>
<outlet property="memoryLabel" destination="afs-cg-oB5" id="P5f-ly-ecc"/>
<outlet property="memoryV" destination="hFX-Vq-By3" id="7Vc-i0-36q"/>
<outlet property="schedLabel" destination="ZKM-FI-Xe2" id="u8H-eu-TF5"/>
<outlet property="scheduleImagV" destination="BNs-VH-sy2" id="yQ5-Zj-E5z"/>
<outlet property="scheduleV" destination="ePh-wk-sbQ" id="Sbk-31-ufC"/>
<outlet property="switchSelect" destination="6qX-xQ-sMM" id="GlB-EK-YhY"/>
<outlet property="titleLabel" destination="9Oo-dN-fMX" id="bAp-YR-hgp"/>
<outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="HKB-TJ-qKk">
<rect key="frame" x="20" y="48" width="40" height="40"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="dismiss"/>
<connections>
<action selector="back:" destination="-1" eventType="touchUpInside" id="9AR-tg-gF0"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="biF-XK-S8K">
<rect key="frame" x="354" y="48" width="40" height="40"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="sure"/>
<connections>
<action selector="sure:" destination="-1" eventType="touchUpInside" id="7YE-2q-OaU"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Add reminder" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yWq-IB-xrU">
<rect key="frame" x="156.5" y="58.5" width="101" height="19.5"/>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
<color key="textColor" red="0.1726125181" green="0.17237710949999999" blue="0.1803931892" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<nil key="highlightedColor"/>
</label>
<stackView opaque="NO" contentMode="scaleToFill" distribution="equalCentering" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="k3D-vM-IQq">
<rect key="frame" x="22" y="118" width="370" height="130"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ePh-wk-sbQ">
<rect key="frame" x="0.0" y="0.0" width="96" height="130"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="schedule_n" translatesAutoresizingMaskIntoConstraints="NO" id="BNs-VH-sy2">
<rect key="frame" x="32" y="38" width="32" height="32"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="FiU-Vk-4W6"/>
<constraint firstAttribute="height" constant="32" id="qGj-2s-mIr"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Schedule" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZKM-FI-Xe2">
<rect key="frame" x="18.5" y="82" width="59" height="16"/>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="13"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Fi8-vH-nwC">
<rect key="frame" x="0.0" y="0.0" width="96" height="130"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<connections>
<action selector="scheduleBtn:" destination="-1" eventType="touchUpInside" id="1o4-iO-iNB"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="BNs-VH-sy2" firstAttribute="centerX" secondItem="ePh-wk-sbQ" secondAttribute="centerX" id="5Fg-eh-Jcs"/>
<constraint firstAttribute="bottom" secondItem="Fi8-vH-nwC" secondAttribute="bottom" id="AA8-W5-gf4"/>
<constraint firstAttribute="width" constant="96" id="AL8-dU-ubt"/>
<constraint firstItem="BNs-VH-sy2" firstAttribute="top" secondItem="ePh-wk-sbQ" secondAttribute="top" constant="38" id="EhU-ih-EWY"/>
<constraint firstAttribute="trailing" secondItem="Fi8-vH-nwC" secondAttribute="trailing" id="Ioa-mt-I5S"/>
<constraint firstAttribute="height" constant="130" id="Q4C-1u-Bbv"/>
<constraint firstItem="ZKM-FI-Xe2" firstAttribute="centerX" secondItem="ePh-wk-sbQ" secondAttribute="centerX" id="ekr-kG-pfR"/>
<constraint firstItem="ZKM-FI-Xe2" firstAttribute="top" secondItem="BNs-VH-sy2" secondAttribute="bottom" constant="12" id="f7b-S1-yMn"/>
<constraint firstItem="Fi8-vH-nwC" firstAttribute="leading" secondItem="ePh-wk-sbQ" secondAttribute="leading" id="kGm-L5-FcL"/>
<constraint firstItem="Fi8-vH-nwC" firstAttribute="top" secondItem="ePh-wk-sbQ" secondAttribute="top" id="pcq-5w-9N9"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="l4W-ml-uDs">
<rect key="frame" x="137" y="0.0" width="96" height="130"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="birthday_n" translatesAutoresizingMaskIntoConstraints="NO" id="weh-A8-M04">
<rect key="frame" x="32" y="38" width="32" height="32"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="1se-PA-MHn"/>
<constraint firstAttribute="height" constant="32" id="bo2-bL-p5H"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Birthday" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Mo8-JO-h27">
<rect key="frame" x="21" y="82" width="54" height="16"/>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="13"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9ma-jd-xFi">
<rect key="frame" x="0.0" y="0.0" width="96" height="130"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<connections>
<action selector="birthdatBtn:" destination="-1" eventType="touchUpInside" id="LVK-3I-08c"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="Mo8-JO-h27" firstAttribute="top" secondItem="weh-A8-M04" secondAttribute="bottom" constant="12" id="1EA-na-q4a"/>
<constraint firstItem="Mo8-JO-h27" firstAttribute="centerX" secondItem="l4W-ml-uDs" secondAttribute="centerX" id="1wH-gn-9KX"/>
<constraint firstItem="9ma-jd-xFi" firstAttribute="top" secondItem="l4W-ml-uDs" secondAttribute="top" id="21f-7y-dVe"/>
<constraint firstAttribute="trailing" secondItem="9ma-jd-xFi" secondAttribute="trailing" id="4bQ-h6-hp8"/>
<constraint firstItem="9ma-jd-xFi" firstAttribute="leading" secondItem="l4W-ml-uDs" secondAttribute="leading" id="U6b-kf-pci"/>
<constraint firstAttribute="width" constant="96" id="VM8-Wn-RKJ"/>
<constraint firstAttribute="height" constant="130" id="Wpk-Sh-8u8"/>
<constraint firstItem="weh-A8-M04" firstAttribute="centerX" secondItem="l4W-ml-uDs" secondAttribute="centerX" id="ZFO-Co-bkb"/>
<constraint firstAttribute="bottom" secondItem="9ma-jd-xFi" secondAttribute="bottom" id="gOT-DQ-Is4"/>
<constraint firstItem="weh-A8-M04" firstAttribute="top" secondItem="l4W-ml-uDs" secondAttribute="top" constant="38" id="rYw-al-K56"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hFX-Vq-By3">
<rect key="frame" x="274" y="0.0" width="96" height="130"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="memor_n" translatesAutoresizingMaskIntoConstraints="NO" id="ynf-Vi-AZ0">
<rect key="frame" x="32" y="38" width="32" height="32"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="Xkj-IZ-ZeP"/>
<constraint firstAttribute="height" constant="32" id="pEb-2P-x7N"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Memory " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="afs-cg-oB5">
<rect key="frame" x="20.5" y="82" width="55" height="16"/>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="13"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Cd1-Hj-wB7">
<rect key="frame" x="0.0" y="0.0" width="96" height="130"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<connections>
<action selector="memoryBtn:" destination="-1" eventType="touchUpInside" id="kKS-Re-9Hu"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="ynf-Vi-AZ0" firstAttribute="top" secondItem="hFX-Vq-By3" secondAttribute="top" constant="38" id="6K6-u3-MaA"/>
<constraint firstItem="Cd1-Hj-wB7" firstAttribute="top" secondItem="hFX-Vq-By3" secondAttribute="top" id="Ed2-Pv-GL6"/>
<constraint firstAttribute="bottom" secondItem="Cd1-Hj-wB7" secondAttribute="bottom" id="SBB-Gl-hlg"/>
<constraint firstItem="afs-cg-oB5" firstAttribute="centerX" secondItem="hFX-Vq-By3" secondAttribute="centerX" id="WH7-WE-AMx"/>
<constraint firstAttribute="trailing" secondItem="Cd1-Hj-wB7" secondAttribute="trailing" id="Wkh-wk-8sq"/>
<constraint firstAttribute="height" constant="130" id="aT2-6M-ETL"/>
<constraint firstItem="afs-cg-oB5" firstAttribute="top" secondItem="ynf-Vi-AZ0" secondAttribute="bottom" constant="12" id="dOb-qU-jru"/>
<constraint firstItem="Cd1-Hj-wB7" firstAttribute="leading" secondItem="hFX-Vq-By3" secondAttribute="leading" id="ex5-3P-kGe"/>
<constraint firstItem="ynf-Vi-AZ0" firstAttribute="centerX" secondItem="hFX-Vq-By3" secondAttribute="centerX" id="q2K-5B-Jxw"/>
<constraint firstAttribute="width" constant="96" id="wPj-u5-z07"/>
</constraints>
</view>
</subviews>
<constraints>
<constraint firstAttribute="height" constant="130" id="Mif-Qc-Dtm"/>
</constraints>
</stackView>
<label opaque="NO" userInteractionEnabled="NO" alpha="0.5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Tittle" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9G7-Pi-rMq">
<rect key="frame" x="30" y="280" width="33.5" height="17"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter the event you wish to commemorate" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="9Oo-dN-fMX">
<rect key="frame" x="30" y="307" width="354" height="40"/>
<constraints>
<constraint firstAttribute="height" constant="40" id="Hkj-MB-9Nq"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4rv-VI-D1r">
<rect key="frame" x="30" y="347" width="354" height="1"/>
<color key="backgroundColor" red="0.91012281179999999" green="0.91294866799999996" blue="0.94902449850000004" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="syl-Uw-NW2"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" alpha="0.5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Date" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0qZ-wK-EqZ">
<rect key="frame" x="30" y="371" width="30.5" height="17"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Select date" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="RDK-VK-JRm">
<rect key="frame" x="30" y="398" width="284" height="40"/>
<constraints>
<constraint firstAttribute="height" constant="40" id="FlW-sA-cmK"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ubs-H2-F6n">
<rect key="frame" x="30" y="438" width="354" height="1"/>
<color key="backgroundColor" red="0.91012281179999999" green="0.91294866799999996" blue="0.94902449850000004" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="hxG-Vw-egC"/>
</constraints>
</view>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="date" translatesAutoresizingMaskIntoConstraints="NO" id="Ayq-5a-h95">
<rect key="frame" x="364" y="408" width="20" height="20"/>
<constraints>
<constraint firstAttribute="height" constant="20" id="1sX-Sp-YUV"/>
<constraint firstAttribute="width" constant="20" id="l3D-1U-SOr"/>
</constraints>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="w4D-wm-vLV">
<rect key="frame" x="30" y="388" width="354" height="50"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<connections>
<action selector="dateSelect:" destination="-1" eventType="touchUpInside" id="faa-Oi-ELT"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" alpha="0.5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Remind" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Tna-7Y-rBm">
<rect key="frame" x="30" y="462" width="48.5" height="17"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Whether to remind" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mKS-T1-0FD">
<rect key="frame" x="30" y="495" width="139" height="19.5"/>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6qX-xQ-sMM">
<rect key="frame" x="335" y="489" width="51" height="31"/>
<color key="onTintColor" red="0.36363440749999998" green="0.56800788639999999" blue="0.96867018940000005" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<connections>
<action selector="switchSele:" destination="-1" eventType="valueChanged" id="n3n-es-s35"/>
</connections>
</switch>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="OM1-aC-nD3">
<rect key="frame" x="30" y="530" width="354" height="1"/>
<color key="backgroundColor" red="0.91012281179999999" green="0.91294866799999996" blue="0.94902449850000004" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="mgk-iC-KO7"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" alpha="0.5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Photo" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="87m-Fz-W4z">
<rect key="frame" x="30" y="554" width="38" height="17"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="camera" translatesAutoresizingMaskIntoConstraints="NO" id="Vcq-pb-Wxe">
<rect key="frame" x="30" y="587" width="100" height="100"/>
<constraints>
<constraint firstAttribute="width" constant="100" id="YPe-wH-UUE"/>
<constraint firstAttribute="height" constant="100" id="yzQ-2j-Qbh"/>
</constraints>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gZ1-5K-LH6">
<rect key="frame" x="110" y="587" width="20" height="22"/>
<constraints>
<constraint firstAttribute="height" constant="22" id="H3b-iM-jpl"/>
<constraint firstAttribute="width" constant="20" id="aiZ-t4-76I"/>
</constraints>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="delete"/>
<connections>
<action selector="btndelete:" destination="-1" eventType="touchUpInside" id="F6Q-G3-zq7"/>
</connections>
</button>
</subviews>
<viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<constraints>
<constraint firstItem="w4D-wm-vLV" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="05h-vZ-vo2"/>
<constraint firstItem="Ubs-H2-F6n" firstAttribute="top" secondItem="RDK-VK-JRm" secondAttribute="bottom" id="1NP-V2-INP"/>
<constraint firstItem="6qX-xQ-sMM" firstAttribute="centerY" secondItem="mKS-T1-0FD" secondAttribute="centerY" id="7kY-Gz-oGg"/>
<constraint firstItem="87m-Fz-W4z" firstAttribute="top" secondItem="OM1-aC-nD3" secondAttribute="bottom" constant="23" id="7n1-IL-yjc"/>
<constraint firstItem="9G7-Pi-rMq" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="7t3-1i-idu"/>
<constraint firstItem="Ubs-H2-F6n" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="30" id="8T6-hm-67l"/>
<constraint firstItem="OM1-aC-nD3" firstAttribute="top" secondItem="6qX-xQ-sMM" secondAttribute="bottom" constant="10" id="Aks-Nu-dry"/>
<constraint firstItem="4rv-VI-D1r" firstAttribute="top" secondItem="9Oo-dN-fMX" secondAttribute="bottom" id="BRt-bf-3eb"/>
<constraint firstItem="4rv-VI-D1r" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="Bdz-tp-rFe"/>
<constraint firstItem="87m-Fz-W4z" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="Dbs-ls-T5N"/>
<constraint firstAttribute="trailing" secondItem="Ubs-H2-F6n" secondAttribute="trailing" constant="30" id="E6L-NA-h1D"/>
<constraint firstItem="gZ1-5K-LH6" firstAttribute="top" secondItem="Vcq-pb-Wxe" secondAttribute="top" id="GUc-x8-yUQ"/>
<constraint firstItem="mKS-T1-0FD" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="HwI-AH-67S"/>
<constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="RDK-VK-JRm" secondAttribute="trailing" constant="100" id="IsP-iN-26O"/>
<constraint firstAttribute="trailing" secondItem="w4D-wm-vLV" secondAttribute="trailing" constant="30" id="MEN-fa-6HV"/>
<constraint firstItem="Ayq-5a-h95" firstAttribute="centerY" secondItem="RDK-VK-JRm" secondAttribute="centerY" id="Mfl-D2-cnb"/>
<constraint firstItem="Tna-7Y-rBm" firstAttribute="top" secondItem="Ubs-H2-F6n" secondAttribute="bottom" constant="23" id="O7h-Ra-KRP"/>
<constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="k3D-vM-IQq" secondAttribute="trailing" constant="22" id="UXq-be-4jx"/>
<constraint firstItem="biF-XK-S8K" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" id="WvG-i5-hVQ"/>
<constraint firstItem="Tna-7Y-rBm" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="XPM-PY-Soo"/>
<constraint firstItem="k3D-vM-IQq" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="22" id="Xpa-eb-7FQ"/>
<constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="6qX-xQ-sMM" secondAttribute="trailing" constant="30" id="bcg-on-AMx"/>
<constraint firstItem="Vcq-pb-Wxe" firstAttribute="top" secondItem="87m-Fz-W4z" secondAttribute="bottom" constant="16" id="ckT-4b-MhH"/>
<constraint firstItem="gZ1-5K-LH6" firstAttribute="leading" secondItem="Vcq-pb-Wxe" secondAttribute="trailing" constant="-20" id="dIM-Np-IBl"/>
<constraint firstItem="RDK-VK-JRm" firstAttribute="top" secondItem="0qZ-wK-EqZ" secondAttribute="bottom" constant="10" id="f3V-r5-Wjq"/>
<constraint firstItem="9G7-Pi-rMq" firstAttribute="top" secondItem="k3D-vM-IQq" secondAttribute="bottom" constant="32" id="f9j-0z-6oF"/>
<constraint firstItem="9Oo-dN-fMX" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="gaR-G6-UB7"/>
<constraint firstItem="k3D-vM-IQq" firstAttribute="top" secondItem="yWq-IB-xrU" secondAttribute="bottom" constant="40" id="gsa-Tm-qtn"/>
<constraint firstItem="OM1-aC-nD3" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="30" id="hM4-hi-jUx"/>
<constraint firstItem="w4D-wm-vLV" firstAttribute="top" secondItem="0qZ-wK-EqZ" secondAttribute="bottom" id="hpr-jK-AJG"/>
<constraint firstItem="yWq-IB-xrU" firstAttribute="centerY" secondItem="HKB-TJ-qKk" secondAttribute="centerY" id="hrY-Eb-L4P"/>
<constraint firstItem="Ubs-H2-F6n" firstAttribute="top" secondItem="w4D-wm-vLV" secondAttribute="bottom" id="lSG-1t-Z1o"/>
<constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="biF-XK-S8K" secondAttribute="trailing" constant="20" id="lcF-G6-i4e"/>
<constraint firstAttribute="trailing" secondItem="OM1-aC-nD3" secondAttribute="trailing" constant="30" id="mDl-TU-RmC"/>
<constraint firstItem="HKB-TJ-qKk" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="20" id="msr-i2-NUe"/>
<constraint firstItem="HKB-TJ-qKk" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" id="oAx-tn-iiN"/>
<constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="9Oo-dN-fMX" secondAttribute="trailing" constant="30" id="oGg-xR-wVo"/>
<constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="Ayq-5a-h95" secondAttribute="trailing" constant="30" id="p8a-6r-Pv6"/>
<constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="4rv-VI-D1r" secondAttribute="trailing" constant="30" id="qTN-xP-cs7"/>
<constraint firstItem="RDK-VK-JRm" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="30" id="qhg-kG-9Ka"/>
<constraint firstItem="Vcq-pb-Wxe" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="qkO-c2-xnn"/>
<constraint firstItem="mKS-T1-0FD" firstAttribute="top" secondItem="Tna-7Y-rBm" secondAttribute="bottom" constant="16" id="sby-7N-Fql"/>
<constraint firstItem="yWq-IB-xrU" firstAttribute="centerX" secondItem="i5M-Pr-FkT" secondAttribute="centerX" id="se5-Ne-Ixr"/>
<constraint firstItem="0qZ-wK-EqZ" firstAttribute="top" secondItem="4rv-VI-D1r" secondAttribute="bottom" constant="23" id="u4x-qH-NOn"/>
<constraint firstItem="0qZ-wK-EqZ" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="30" id="v9Q-gh-yDC"/>
<constraint firstItem="9Oo-dN-fMX" firstAttribute="top" secondItem="9G7-Pi-rMq" secondAttribute="bottom" constant="10" id="vvG-ak-CHI"/>
</constraints>
<point key="canvasLocation" x="131.8840579710145" y="-11.383928571428571"/>
</view>
</objects>
<resources>
<image name="birthday_n" width="36" height="36"/>
<image name="camera" width="100" height="100"/>
<image name="date" width="20" height="20"/>
<image name="delete" width="20" height="20"/>
<image name="dismiss" width="40" height="40"/>
<image name="memor_n" width="32" height="32"/>
<image name="schedule_n" width="32" height="32"/>
<image name="sure" width="40" height="40"/>
</resources>
</document>

View File

@ -0,0 +1,229 @@
//
// AppDelegate.swift
// anniversary_Project
//
// Created by 16 on 2024/4/11.
//
import UIKit
import IQKeyboardManagerSwift
import Photos
import SVProgressHUD
import AppLovinSDK
import FirebaseCore
import FirebaseAnalytics
import Alamofire
@main
class AppDelegate: UIResponder, UIApplicationDelegate,UNUserNotificationCenterDelegate {
var window: UIWindow?
let hasLaunchedBeforeKey = "hasLaunchedBefore"
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
IQKeyboardManager.shared.enable = true
self.window?.frame = UIScreen.main.bounds
UNUserNotificationCenter.current().delegate = self
// let vc = AV_RootTabbarVC()
// self.window?.rootViewController = AV_NAVVC(rootViewController: vc)
let userDefaults = UserDefaults.standard
let initConfig = ALSdkInitializationConfiguration(sdkKey: "NLQHJDx4rcfd5IqhZf9nad2tIqFSH8SSKP3DXD18sTKUvV6tBfrH9_RPCGb6hvEn3NPXJDmUQCnvnKgHIT7Qn4") { builder in
builder.mediationProvider = ALMediationProviderMAX
}
if userDefaults.bool(forKey: hasLaunchedBeforeKey) {
//
let vc = AV_LaunchLimitesVC()
self.window?.rootViewController = AV_NAVVC(rootViewController: vc)
ALSdk.shared().initialize(with: initConfig) { sdkConfig in
// Start loading ads
vc.createInterstitialAd()
}
self.window?.rootViewController = AV_NAVVC(rootViewController: vc)
} else {
//
let vc = AV_SelectGenderVC()
self.window?.rootViewController = AV_NAVVC(rootViewController: vc)
userDefaults.set(true, forKey: hasLaunchedBeforeKey)
setdispatch()
stePermissions()
let currentDate = Date()
// 使 UserDefaults
let defaults = UserDefaults.standard
defaults.set(currentDate, forKey: "savedDate")
ALSdk.shared().initialize(with: initConfig) { sdkConfig in
}
}
self.window?.makeKeyAndVisible()
//
if #available(iOS 13.0, *) {
window?.overrideUserInterfaceStyle = .light
}
return true
}
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
completionHandler([.alert, .sound, .badge])
}
func stePermissions(){
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
if granted {
print("Permission granted")
} else if let error = error {
print("Permission denied: \(error.localizedDescription)")
}
}
requestPhotoLibraryPermission()
setNetwork()
// 使
let healthManager = HealthManager()
//
healthManager.requestAuthorization { (success, error) in
if success {
print("HealthKit authorization granted")
} else if let error = error {
print("HealthKit authorization failed with error: \(error.localizedDescription)")
}
}
}
func requestPhotoLibraryPermission() {
//
let status = PHPhotoLibrary.authorizationStatus()
//
switch status {
case .authorized:
// 访
print("相册权限已授权")
case .denied, .restricted:
// 访
print("相册权限已拒绝或受限,请在设置中开启权限")
case .notDetermined:
//
PHPhotoLibrary.requestAuthorization { [weak self] (newStatus) in
DispatchQueue.main.async {
if newStatus == .authorized {
// 访
print("用户已授权访问相册")
} else {
// 访
print("用户未授权访问相册")
}
}
}
@unknown default:
//
print("未知的相册权限状态")
}
}
func setNetwork(){
// URL
if let url = URL(string: "https://www.baidu.com/") {
// URLSession
let session = URLSession.shared
//
let task = session.dataTask(with: url) { (data, response, error) in
if let error = error {
print("网络请求出错:\(error)")
} else if let data = data {
}
}
//
task.resume()
} else {
print("URL无效")
}
}
}
func setdispatch(){
// 使
let dispatchGroup = DispatchGroup()
// IDFA
dispatchGroup.enter()
DispatchQueue.global(qos: .background).async {
requestTrackingAuthorization { idfa in
DispatchQueue.main.async {
if let idfa = idfa {
print("IDFA: \(idfa)")
StartManager.shared.idfaid = idfa
print("Stored IDFA: \(StartManager.shared.idfaid ?? "N/A")")
} else {
print("IDFA is not available or tracking authorization denied.")
}
dispatchGroup.leave()
}
}
}
// IP
dispatchGroup.enter()
DispatchQueue.global(qos: .background).async {
if let localIP = getLocalIPAddress() {
DispatchQueue.main.async {
print("Local IP Address: \(localIP)")
StartManager.shared.localIP = localIP
dispatchGroup.leave()
}
} else {
DispatchQueue.main.async {
print("Local IP Address not available")
dispatchGroup.leave()
}
}
}
// IP
dispatchGroup.enter()
DispatchQueue.global(qos: .background).async {
getPublicIPAddress { publicIP in
DispatchQueue.main.async {
if let publicIP = publicIP {
print("Public IP Address: \(publicIP)")
StartManager.shared.publicIP = publicIP
print("Stored Public IP Address: \(StartManager.shared.publicIP ?? "N/A")")
} else {
print("Public IP Address not available")
}
dispatchGroup.leave()
}
}
}
// ID
dispatchGroup.enter()
DispatchQueue.global(qos: .background).async {
let deviceID = UIDevice.current.identifierForVendor?.uuidString
DispatchQueue.main.async {
StartManager.shared.devicID = deviceID
print("Device ID: \(StartManager.shared.devicID ?? "N/A")")
dispatchGroup.leave()
}
}
//
dispatchGroup.notify(queue: .main) {
print("All tasks are completed.")
}
}

View File

@ -0,0 +1,11 @@
{
"colors" : [
{
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,119 @@
{
"images" : [
{
"filename" : "icon-20@2x.png",
"idiom" : "universal",
"platform" : "ios",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "icon-20@3x.png",
"idiom" : "universal",
"platform" : "ios",
"scale" : "3x",
"size" : "20x20"
},
{
"filename" : "icon-29@2x.png",
"idiom" : "universal",
"platform" : "ios",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "icon-29@3x.png",
"idiom" : "universal",
"platform" : "ios",
"scale" : "3x",
"size" : "29x29"
},
{
"filename" : "icon-38@2x.png",
"idiom" : "universal",
"platform" : "ios",
"scale" : "2x",
"size" : "38x38"
},
{
"filename" : "icon-38@3x.png",
"idiom" : "universal",
"platform" : "ios",
"scale" : "3x",
"size" : "38x38"
},
{
"filename" : "icon-40@2x.png",
"idiom" : "universal",
"platform" : "ios",
"scale" : "2x",
"size" : "40x40"
},
{
"filename" : "icon-40@3x.png",
"idiom" : "universal",
"platform" : "ios",
"scale" : "3x",
"size" : "40x40"
},
{
"filename" : "icon-60@2x.png",
"idiom" : "universal",
"platform" : "ios",
"scale" : "2x",
"size" : "60x60"
},
{
"filename" : "icon-60@3x.png",
"idiom" : "universal",
"platform" : "ios",
"scale" : "3x",
"size" : "60x60"
},
{
"filename" : "icon-64@2x.png",
"idiom" : "universal",
"platform" : "ios",
"scale" : "2x",
"size" : "64x64"
},
{
"filename" : "icon-64@3x.png",
"idiom" : "universal",
"platform" : "ios",
"scale" : "3x",
"size" : "64x64"
},
{
"filename" : "icon-68@2x.png",
"idiom" : "universal",
"platform" : "ios",
"scale" : "2x",
"size" : "68x68"
},
{
"filename" : "icon-76@2x.png",
"idiom" : "universal",
"platform" : "ios",
"scale" : "2x",
"size" : "76x76"
},
{
"filename" : "icon-83.5@2x.png",
"idiom" : "universal",
"platform" : "ios",
"scale" : "2x",
"size" : "83.5x83.5"
},
{
"filename" : "icon-1024.png",
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 526 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 570 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "分组_10.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "分组_10@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "分组_10@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: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 577 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 525 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 665 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

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