@@ -0,0 +1,12 @@ | |||||
// | |||||
// AlampfireUtil.swift | |||||
// im-client-ios | |||||
// | |||||
// Created by 北京居家科技有限公司 on 2022/1/19. | |||||
// | |||||
import Foundation | |||||
import UIKit | |||||
import Alamofire | |||||
@@ -0,0 +1,11 @@ | |||||
{ | |||||
"colors" : [ | |||||
{ | |||||
"idiom" : "universal" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
@@ -0,0 +1,116 @@ | |||||
{ | |||||
"images" : [ | |||||
{ | |||||
"filename" : "jjtb(3).png", | |||||
"idiom" : "iphone", | |||||
"scale" : "2x", | |||||
"size" : "20x20" | |||||
}, | |||||
{ | |||||
"filename" : "jjtb(4).png", | |||||
"idiom" : "iphone", | |||||
"scale" : "3x", | |||||
"size" : "20x20" | |||||
}, | |||||
{ | |||||
"filename" : "jjtb(5).png", | |||||
"idiom" : "iphone", | |||||
"scale" : "2x", | |||||
"size" : "29x29" | |||||
}, | |||||
{ | |||||
"filename" : "jjtb(6).png", | |||||
"idiom" : "iphone", | |||||
"scale" : "3x", | |||||
"size" : "29x29" | |||||
}, | |||||
{ | |||||
"filename" : "jjtb(7).png", | |||||
"idiom" : "iphone", | |||||
"scale" : "2x", | |||||
"size" : "40x40" | |||||
}, | |||||
{ | |||||
"filename" : "jjtb(8).png", | |||||
"idiom" : "iphone", | |||||
"scale" : "3x", | |||||
"size" : "40x40" | |||||
}, | |||||
{ | |||||
"filename" : "jjtb(2).png", | |||||
"idiom" : "iphone", | |||||
"scale" : "2x", | |||||
"size" : "60x60" | |||||
}, | |||||
{ | |||||
"filename" : "jjtb(9).png", | |||||
"idiom" : "iphone", | |||||
"scale" : "3x", | |||||
"size" : "60x60" | |||||
}, | |||||
{ | |||||
"filename" : "jjtb(10).png", | |||||
"idiom" : "ipad", | |||||
"scale" : "1x", | |||||
"size" : "20x20" | |||||
}, | |||||
{ | |||||
"filename" : "jjtb(3)-1.png", | |||||
"idiom" : "ipad", | |||||
"scale" : "2x", | |||||
"size" : "20x20" | |||||
}, | |||||
{ | |||||
"filename" : "jjtb(11).png", | |||||
"idiom" : "ipad", | |||||
"scale" : "1x", | |||||
"size" : "29x29" | |||||
}, | |||||
{ | |||||
"filename" : "jjtb(12).png", | |||||
"idiom" : "ipad", | |||||
"scale" : "2x", | |||||
"size" : "29x29" | |||||
}, | |||||
{ | |||||
"filename" : "jjtb(3)-2.png", | |||||
"idiom" : "ipad", | |||||
"scale" : "1x", | |||||
"size" : "40x40" | |||||
}, | |||||
{ | |||||
"filename" : "jjtb(13).png", | |||||
"idiom" : "ipad", | |||||
"scale" : "2x", | |||||
"size" : "40x40" | |||||
}, | |||||
{ | |||||
"filename" : "jjtb(14).png", | |||||
"idiom" : "ipad", | |||||
"scale" : "1x", | |||||
"size" : "76x76" | |||||
}, | |||||
{ | |||||
"filename" : "jjtb(15).png", | |||||
"idiom" : "ipad", | |||||
"scale" : "2x", | |||||
"size" : "76x76" | |||||
}, | |||||
{ | |||||
"filename" : "jjtb(16).png", | |||||
"idiom" : "ipad", | |||||
"scale" : "2x", | |||||
"size" : "83.5x83.5" | |||||
}, | |||||
{ | |||||
"filename" : "jjtb(1).png", | |||||
"idiom" : "ios-marketing", | |||||
"scale" : "1x", | |||||
"size" : "1024x1024" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
@@ -0,0 +1,6 @@ | |||||
{ | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
@@ -0,0 +1,36 @@ | |||||
// | |||||
// ContentView.swift | |||||
// im-client-ios | |||||
// | |||||
// Created by 北京居家科技有限公司 on 2021/12/27. | |||||
// | |||||
import SwiftUI | |||||
import WebKit | |||||
import UIKit | |||||
struct ContentView: View { | |||||
@State private var image: Image? | |||||
@State private var showingImagePicker = false | |||||
var body: some View { | |||||
VStack { | |||||
image? | |||||
.resizable() | |||||
.scaledToFit() | |||||
ImagePicker() | |||||
// Button("Select Image") { | |||||
// self.showingImagePicker = true | |||||
// } | |||||
} | |||||
} | |||||
} | |||||
struct ContentView_Previews: PreviewProvider { | |||||
static var previews: some View { | |||||
ContentView() | |||||
} | |||||
} |
@@ -0,0 +1,23 @@ | |||||
// | |||||
// ImagePicker.swift | |||||
// im-client-ios | |||||
// | |||||
// Created by 北京居家科技有限公司 on 2022/1/4. | |||||
// | |||||
import Foundation | |||||
import SwiftUI | |||||
struct ImagePicker: UIViewControllerRepresentable { | |||||
typealias UIViewControllerType = WebViewUI | |||||
func makeUIViewController(context: Context) -> WebViewUI { | |||||
let picker = WebViewUI() | |||||
return picker | |||||
} | |||||
func updateUIViewController(_ uiViewController: WebViewUI, context: Context) { | |||||
} | |||||
} |
@@ -0,0 +1,6 @@ | |||||
{ | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
@@ -0,0 +1,149 @@ | |||||
// | |||||
// CameraView.swift | |||||
// im-client-ios | |||||
// | |||||
// Created by 北京居家科技有限公司 on 2022/3/10. | |||||
// | |||||
import SwiftUI | |||||
import AVFoundation | |||||
let cameraPreview = CameraPreview() | |||||
fileprivate var captureSession = AVCaptureSession() | |||||
fileprivate var videoDataOutput = AVCaptureVideoDataOutput() | |||||
struct CameraPreviewHolder: ContentView{ | |||||
typealias NSViewType = CameraPreview | |||||
func makeNSView(context: NSViewRepresentableContext<CameraPreviewHolder>) -> CameraPreview { | |||||
let cameraPreview = CameraPreview() | |||||
return cameraPreview | |||||
} | |||||
func updateNSView(_ nsView: CameraPreview, context: NSViewRepresentableContext<CameraPreviewHolder>) { | |||||
} | |||||
} | |||||
final class CameraPreview: NSView { | |||||
private var tmp:URL? | |||||
init() { | |||||
super.init(frame: .zero) | |||||
var allowedAccess = false | |||||
let blocker = DispatchGroup() | |||||
blocker.enter() | |||||
AVCaptureDevice.requestAccess(for: .video) { flag in | |||||
allowedAccess = flag | |||||
blocker.leave() | |||||
} | |||||
blocker.wait() | |||||
guard allowedAccess else { | |||||
print("No camera access") | |||||
return | |||||
} | |||||
showCameraViewSeting() | |||||
} | |||||
func showCameraViewSeting() { | |||||
let session = captureSession | |||||
session.beginConfiguration() | |||||
//分辨率 | |||||
session.sessionPreset = AVCaptureSession.Preset.high | |||||
guard let videoDevice = AVCaptureDevice.default(for: .video) else { | |||||
print("No video device") | |||||
return | |||||
} | |||||
guard let videoDeviceInput = try? AVCaptureDeviceInput(device: videoDevice), | |||||
session.canAddInput(videoDeviceInput) | |||||
else { | |||||
print("Unable to determine video device input") | |||||
return | |||||
} | |||||
session.addInput(videoDeviceInput) | |||||
let videoOutput = videoDataOutput | |||||
videoOutput.alwaysDiscardsLateVideoFrames = true | |||||
if session.canAddOutput(videoOutput) { | |||||
session.addOutput(videoOutput) | |||||
} | |||||
session.commitConfiguration() | |||||
captureSession = session | |||||
self.wantsLayer = true | |||||
self.layer = AVCaptureVideoPreviewLayer() | |||||
} | |||||
required init?(coder: NSCoder) { | |||||
fatalError("init(coder:) has not been implemented") | |||||
} | |||||
var videoPreviewLayer: AVCaptureVideoPreviewLayer { | |||||
return self.layer as! AVCaptureVideoPreviewLayer | |||||
} | |||||
override func viewDidMoveToSuperview() { // on iOS .didMoveToSuperview | |||||
super.viewDidMoveToSuperview() | |||||
if nil != self.superview { | |||||
self.videoPreviewLayer.session = captureSession | |||||
self.videoPreviewLayer.videoGravity = .resizeAspect | |||||
captureSession.startRunning() | |||||
} else { | |||||
captureSession.stopRunning() | |||||
} | |||||
} | |||||
func scan(){ | |||||
videoDataOutput.setSampleBufferDelegate(cameraCaptureDelegate, queue: DispatchQueue.main) | |||||
} | |||||
func removeCameraPreview() { | |||||
self.removeFromSuperview() | |||||
} | |||||
} | |||||
class CameraCaptureDelegate: NSObject, AVCaptureVideoDataOutputSampleBufferDelegate{ | |||||
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) { | |||||
let cgImage:CGImage = imageFromSampleBuffer(sampleBuffer: sampleBuffer) | |||||
print("\(cgImage)") | |||||
//获取的图片经过EFQRCode(GitHub上搜这个库)识别,如果含有二维码,即可识别出二维码数据 | |||||
// let result = EFQRCode.recognize(image: cgImage) | |||||
// print("didOutput : \(String(describing: result))") | |||||
} | |||||
func captureOutput(_ output: AVCaptureOutput, didDrop sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) { | |||||
print("didDrop sampleBuffer") | |||||
} | |||||
} | |||||
func imageFromSampleBuffer(sampleBuffer: CMSampleBuffer) -> CGImage { | |||||
let imageBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)! | |||||
let ciImage : CIImage = CIImage(cvPixelBuffer: imageBuffer) | |||||
let context:CIContext = CIContext.init(options: nil) | |||||
let cgImage:CGImage = context.createCGImage(ciImage, from: ciImage.extent)! | |||||
return cgImage | |||||
} |
@@ -0,0 +1,25 @@ | |||||
// | |||||
// Dsbridge.swift | |||||
// im-client-ios | |||||
// | |||||
// Created by 北京居家科技有限公司 on 2022/1/5. | |||||
// | |||||
import Foundation | |||||
typealias JSCallback = (String, Bool)->Void | |||||
class Dsbridge: NSObject { | |||||
//MUST use "_" to ignore the first argument name explicitly。 | |||||
@objc func testSyn( _ arg:String) -> String { | |||||
return String(format:"%@[Swift sync call:%@]", arg, "test") | |||||
} | |||||
@objc func testAsyn( _ arg:String, handler: JSCallback) { | |||||
handler(String(format:"%@[Swift async call:%@]", arg, "test"), true) | |||||
} | |||||
@objc func takePhoto( _ arg:String) -> String { | |||||
return String(format:"%@[Swift sync call:%@]", arg, "test") | |||||
} | |||||
} |
@@ -0,0 +1,15 @@ | |||||
// | |||||
// FileObtain.swift | |||||
// im-client-ios | |||||
// | |||||
// Created by 北京居家科技有限公司 on 2022/1/6. | |||||
// | |||||
import Foundation | |||||
import UIKit | |||||
public class NSOpenPanel : NSSavePanel { | |||||
private func selectUploadFileFromICouldDrive() { | |||||
} | |||||
} |
@@ -0,0 +1,54 @@ | |||||
// | |||||
// ContentView.swift | |||||
// fileModel | |||||
// | |||||
// Created by 陈春杨 on 2022/2/16. | |||||
// | |||||
import SwiftUI | |||||
struct ContentView: View { | |||||
var body: some View { | |||||
Button { | |||||
let path = loadFile() | |||||
} label: { | |||||
HStack { | |||||
Image("upload").resizable().frame(width: 15, height: 15) | |||||
Text("上传文件") | |||||
.foregroundColor(Color.white) | |||||
.font(Font.system(size: 14)) | |||||
}.frame(width: 106, height: 32) | |||||
.background(Color.red) | |||||
}.buttonStyle(PlainButtonStyle()) | |||||
.cornerRadius(4) | |||||
.padding(EdgeInsets(top: 29, leading: 0, bottom: 29, trailing: 0)) } | |||||
// 文件选择 | |||||
func loadFile(isFolder: Bool = false, openFinder: String = "", fileTypes: [String] = [String]()) -> String { | |||||
let dialog = NSOpenPanel() | |||||
dialog.title = "选择文件" | |||||
dialog.showsResizeIndicator = true | |||||
dialog.showsHiddenFiles = false | |||||
dialog.allowsMultipleSelection = false | |||||
dialog.canChooseDirectories = isFolder | |||||
dialog.canChooseFiles = !isFolder | |||||
if !fileTypes.isEmpty { | |||||
dialog.allowedFileTypes = fileTypes | |||||
} | |||||
if !openFinder.isEmpty, let url = URL(string: openFinder) { | |||||
dialog.directoryURL = url | |||||
} | |||||
if dialog.runModal() == .OK, let path = dialog.url?.path { | |||||
return path | |||||
} else { | |||||
return "" | |||||
} | |||||
} | |||||
} | |||||
struct ContentView_Previews: PreviewProvider { | |||||
static var previews: some View { | |||||
ContentView() | |||||
} | |||||
} |
@@ -0,0 +1,8 @@ | |||||
App Thinning Size Report for All Variants of im-client-ios | |||||
Variant: im-client-ios-E1CE033F-EDD1-4252-A036-9FB78E2BB250.ipa | |||||
Supported variant descriptors: [device: iPhone8,1, os-version: 15.0], [device: iPhone14,3, os-version: 15.0], [device: iPad6,8, os-version: 15.0], [device: iPad8,7, os-version: 15.0], [device: iPhone10,4, os-version: 15.0], [device: MacFamily20,1, os-version: 15.0], [device: iPhone12,8, os-version: 15.0], [device: iPad8,11, os-version: 15.0], [device: iPhone14,5, os-version: 15.0], [device: iPhone10,3, os-version: 15.0], [device: iPad13,7, os-version: 15.0], [device: iPhone9,1, os-version: 15.0], [device: iPhone13,1, os-version: 15.0], [device: iPhone10,2, os-version: 15.0], [device: iPhone11,6, os-version: 15.0], [device: iPad13,6, os-version: 15.0], [device: iPhone14,2, os-version: 15.0], [device: iPad7,1, os-version: 15.0], [device: iPad5,1, os-version: 15.0], [device: iPad6,11, os-version: 15.0], [device: iPad11,1, os-version: 15.0], [device: iPhone12,1, os-version: 15.0], [device: iPad6,7, os-version: 15.0], [device: iPad13,4, os-version: 15.0], [device: iPad6,3, os-version: 15.0], [device: iPad11,2, os-version: 15.0], [device: iPhone9,4, os-version: 15.0], [device: iPad5,4, os-version: 15.0], [device: iPad7,6, os-version: 15.0], [device: iPad7,11, os-version: 15.0], [device: iPad6,4, os-version: 15.0], [device: iPad7,4, os-version: 15.0], [device: iPad13,5, os-version: 15.0], [device: iPad7,2, os-version: 15.0], [device: iPad8,4, os-version: 15.0], [device: iPad13,10, os-version: 15.0], [device: iPad8,2, os-version: 15.0], [device: iPad7,12, os-version: 15.0], [device: iPad12,1, os-version: 15.0], [device: iPad11,3, os-version: 15.0], [device: iPhone11,8, os-version: 15.0], [device: iPad8,12, os-version: 15.0], [device: iPhone9,3, os-version: 15.0], [device: iPhone12,3, os-version: 15.0], [device: iPad13,9, os-version: 15.0], [device: iPad5,2, os-version: 15.0], [device: iPhone13,3, os-version: 15.0], [device: iPad14,2, os-version: 15.0], [device: iPad8,3, os-version: 15.0], [device: iPhone11,4, os-version: 15.0], [device: iPhone12,5, os-version: 15.0], [device: iPhone13,4, os-version: 15.0], [device: iPhone10,5, os-version: 15.0], [device: iPhone8,2, os-version: 15.0], [device: iPad13,8, os-version: 15.0], [device: iPad6,12, os-version: 15.0], [device: iPad8,8, os-version: 15.0], [device: iPad8,1, os-version: 15.0], [device: iPad7,3, os-version: 15.0], [device: iPad8,9, os-version: 15.0], [device: iPad5,3, os-version: 15.0], [device: iPod9,1, os-version: 15.0], [device: iPhone8,4, os-version: 15.0], [device: iPhone14,4, os-version: 15.0], [device: iPad11,4, os-version: 15.0], [device: iPad13,2, os-version: 15.0], [device: iPhone10,6, os-version: 15.0], [device: iPad11,7, os-version: 15.0], [device: iPad13,1, os-version: 15.0], [device: iPad12,2, os-version: 15.0], [device: iPad8,6, os-version: 15.0], [device: iPad7,5, os-version: 15.0], [device: iPad8,10, os-version: 15.0], [device: iPad13,11, os-version: 15.0], [device: iPhone9,2, os-version: 15.0], [device: iPhone13,2, os-version: 15.0], [device: iPhone11,2, os-version: 15.0], [device: iPad11,6, os-version: 15.0], [device: iPad8,5, os-version: 15.0], [device: iPhone10,1, os-version: 15.0], and [device: iPad14,1, os-version: 15.0] | |||||
App + On Demand Resources size: 25 KB compressed, 116 KB uncompressed | |||||
App size: 25 KB compressed, 116 KB uncompressed | |||||
On Demand Resources size: Zero KB compressed, Zero KB uncompressed |
@@ -0,0 +1,59 @@ | |||||
<?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>im-client-ios.ipa</key> | |||||
<array> | |||||
<dict> | |||||
<key>architectures</key> | |||||
<array> | |||||
<string>arm64</string> | |||||
</array> | |||||
<key>buildNumber</key> | |||||
<string>1</string> | |||||
<key>certificate</key> | |||||
<dict> | |||||
<key>SHA1</key> | |||||
<string>F9EBE3931A79A8A4EE77674BC989DC12F6C182C1</string> | |||||
<key>dateExpires</key> | |||||
<string>2023/1/4</string> | |||||
<key>type</key> | |||||
<string>Cloud Managed Apple Distribution</string> | |||||
</dict> | |||||
<key>entitlements</key> | |||||
<dict> | |||||
<key>application-identifier</key> | |||||
<string>46BSGN46R3.com.jjkj.im.im-client-ios</string> | |||||
<key>com.apple.developer.team-identifier</key> | |||||
<string>46BSGN46R3</string> | |||||
<key>get-task-allow</key> | |||||
<false/> | |||||
<key>keychain-access-groups</key> | |||||
<array> | |||||
<string>46BSGN46R3.com.jjkj.im.im-client-ios</string> | |||||
</array> | |||||
</dict> | |||||
<key>name</key> | |||||
<string>im-client-ios.app</string> | |||||
<key>profile</key> | |||||
<dict> | |||||
<key>UUID</key> | |||||
<string>6ea165b8-027d-4edd-91f4-6c0e86c3d373</string> | |||||
<key>dateExpires</key> | |||||
<string>2023/1/4</string> | |||||
<key>name</key> | |||||
<string>iOS Team Ad Hoc Provisioning Profile: com.jjkj.im.im-client-ios</string> | |||||
</dict> | |||||
<key>team</key> | |||||
<dict> | |||||
<key>id</key> | |||||
<string>46BSGN46R3</string> | |||||
<key>name</key> | |||||
<string>tao he</string> | |||||
</dict> | |||||
<key>versionNumber</key> | |||||
<string>1.0</string> | |||||
</dict> | |||||
</array> | |||||
</dict> | |||||
</plist> |
@@ -0,0 +1,20 @@ | |||||
<?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>compileBitcode</key> | |||||
<true/> | |||||
<key>destination</key> | |||||
<string>export</string> | |||||
<key>method</key> | |||||
<string>ad-hoc</string> | |||||
<key>signingStyle</key> | |||||
<string>automatic</string> | |||||
<key>stripSwiftSymbols</key> | |||||
<true/> | |||||
<key>teamID</key> | |||||
<string>46BSGN46R3</string> | |||||
<key>thinning</key> | |||||
<string>iPhone14,5</string> | |||||
</dict> | |||||
</plist> |
@@ -0,0 +1,523 @@ | |||||
<?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>variants</key> | |||||
<dict> | |||||
<key>im-client-ios-E1CE033F-EDD1-4252-A036-9FB78E2BB250.ipa</key> | |||||
<dict> | |||||
<key>limitUncompressedInitialPrefetchedODR</key> | |||||
<integer>2147483648</integer> | |||||
<key>onDemandResourcesAssetPacks</key> | |||||
<dict/> | |||||
<key>sizeCompressedApp</key> | |||||
<integer>24659</integer> | |||||
<key>sizeCompressedAppAndODR</key> | |||||
<integer>24659</integer> | |||||
<key>sizeCompressedODR</key> | |||||
<integer>0</integer> | |||||
<key>sizeUncompressedApp</key> | |||||
<integer>115671</integer> | |||||
<key>sizeUncompressedAppAndODR</key> | |||||
<integer>115671</integer> | |||||
<key>sizeUncompressedInitialPrefetchedODR</key> | |||||
<integer>0</integer> | |||||
<key>sizeUncompressedInitialPrefetchedODRExceedsLimit</key> | |||||
<false/> | |||||
<key>sizeUncompressedODR</key> | |||||
<integer>0</integer> | |||||
<key>tagsUncompressedInitialPrefetchedODR</key> | |||||
<array/> | |||||
<key>variantDescriptors</key> | |||||
<array> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone8,1</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone14,3</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad6,8</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad8,7</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone10,4</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>MacFamily20,1</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone12,8</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad8,11</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone14,5</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone10,3</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad13,7</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone9,1</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone13,1</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone10,2</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone11,6</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad13,6</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone14,2</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad7,1</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad5,1</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad6,11</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad11,1</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone12,1</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad6,7</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad13,4</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad6,3</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad11,2</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone9,4</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad5,4</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad7,6</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad7,11</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad6,4</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad7,4</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad13,5</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad7,2</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad8,4</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad13,10</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad8,2</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad7,12</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad12,1</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad11,3</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone11,8</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad8,12</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone9,3</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone12,3</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad13,9</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad5,2</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone13,3</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad14,2</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad8,3</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone11,4</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone12,5</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone13,4</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone10,5</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone8,2</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad13,8</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad6,12</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad8,8</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad8,1</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad7,3</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad8,9</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad5,3</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPod9,1</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone8,4</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone14,4</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad11,4</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad13,2</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone10,6</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad11,7</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad13,1</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad12,2</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad8,6</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad7,5</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad8,10</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad13,11</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone9,2</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone13,2</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone11,2</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad11,6</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad8,5</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPhone10,1</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
<dict> | |||||
<key>device</key> | |||||
<string>iPad14,1</string> | |||||
<key>os-version</key> | |||||
<string>15.0</string> | |||||
</dict> | |||||
</array> | |||||
</dict> | |||||
</dict> | |||||
</dict> | |||||
</plist> |
@@ -0,0 +1,4 @@ | |||||
// | |||||
// Use this file to import your target's public headers that you would like to expose to Swift. | |||||
// | |||||
@@ -0,0 +1,17 @@ | |||||
// | |||||
// im_client_iosApp.swift | |||||
// im-client-ios | |||||
// | |||||
// Created by 北京居家科技有限公司 on 2021/12/27. | |||||
// | |||||
import SwiftUI | |||||
@main | |||||
struct im_client_iosApp: App { | |||||
var body: some Scene { | |||||
WindowGroup { | |||||
ContentView() | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,22 @@ | |||||
// | |||||
// AppDelegate.swift | |||||
// im-client-ios | |||||
// | |||||
// Created by 北京居家科技有限公司 on 2022/2/25. | |||||
// | |||||
import UIKit | |||||
import UserNotifications | |||||
@UIApplicationMain | |||||
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate { | |||||
var window: UIWindow? | |||||
} | |||||
@@ -0,0 +1,60 @@ | |||||
// | |||||
// UserNotificationManager.swift | |||||
// im-client-ios | |||||
// | |||||
// Created by 北京居家科技有限公司 on 2022/2/24. | |||||
// | |||||
import Foundation | |||||
import UserNotifications | |||||
import CoreLocation | |||||
class UserNotificationManager{ | |||||
static let instance = UserNotificationManager() | |||||
func requestAuthorization(){ | |||||
UNUserNotificationCenter.current().requestAuthorization(options: [.alert,.sound,.badge]) { (success, error) in | |||||
if let error = error { | |||||
print("something goes wrong,\(error) ") | |||||
}else{ | |||||
print("success") | |||||
} | |||||
} | |||||
} | |||||
func sendNotification(title: String!, body: String!){ | |||||
let content = UNMutableNotificationContent() | |||||
content.title = title | |||||
content.body = body | |||||
content.sound = .default | |||||
//5秒之后触发通知 | |||||
// let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false) | |||||
//17:05触发通知 | |||||
// var date = DateComponents() | |||||
// date.hour = 17 /* 使用24小时制*/ | |||||
// date.minute = 18 | |||||
// | |||||
// let trigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: false) | |||||
let coordinate = CLLocationCoordinate2D( | |||||
latitude: 50, | |||||
longitude: 60) | |||||
let region = CLCircularRegion( | |||||
center: coordinate, | |||||
radius: 200, | |||||
identifier: "") | |||||
region.notifyOnEntry = true | |||||
region.notifyOnExit = true | |||||
let trigger = UNLocationNotificationTrigger(region: region, repeats: true) | |||||
let request = UNNotificationRequest(identifier: "notification", content: content, trigger: trigger) | |||||
UNUserNotificationCenter.current().add(request) | |||||
} | |||||
func removeNotification(){ | |||||
UNUserNotificationCenter.current().removeAllPendingNotificationRequests() | |||||
UNUserNotificationCenter.current().removeAllDeliveredNotifications() | |||||
} | |||||
} |
@@ -0,0 +1,22 @@ | |||||
// | |||||
// delegate.swift | |||||
// im-client-ios | |||||
// | |||||
// Created by 北京居家科技有限公司 on 2022/2/24. | |||||
// | |||||
import UserNotifications | |||||
extension AppDelegate:UNUserNotificationCenterDelegate{ | |||||
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { | |||||
} | |||||
func userNotificationCenter(_ center: UNUserNotificationCenter, openSettingsFor notification: UNNotification?) { | |||||
} | |||||
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { | |||||
} | |||||
} |
@@ -0,0 +1,65 @@ | |||||
<?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>im-client-ios.ipa</key> | |||||
<array> | |||||
<dict> | |||||
<key>architectures</key> | |||||
<array> | |||||
<string>arm64</string> | |||||
</array> | |||||
<key>bitcode</key> | |||||
<true/> | |||||
<key>buildNumber</key> | |||||
<string>1</string> | |||||
<key>certificate</key> | |||||
<dict> | |||||
<key>SHA1</key> | |||||
<string>BA0E100A84D64D30C69ACAB19CB96D95BB4428B7</string> | |||||
<key>dateExpires</key> | |||||
<string>2023/3/1</string> | |||||
<key>type</key> | |||||
<string>Apple Distribution</string> | |||||
</dict> | |||||
<key>entitlements</key> | |||||
<dict> | |||||
<key>application-identifier</key> | |||||
<string>46BSGN46R3.com.jjkj.im.im-client-ios</string> | |||||
<key>beta-reports-active</key> | |||||
<true/> | |||||
<key>com.apple.developer.team-identifier</key> | |||||
<string>46BSGN46R3</string> | |||||
<key>get-task-allow</key> | |||||
<false/> | |||||
<key>keychain-access-groups</key> | |||||
<array> | |||||
<string>46BSGN46R3.com.jjkj.im.im-client-ios</string> | |||||
</array> | |||||
</dict> | |||||
<key>name</key> | |||||
<string>im-client-ios.app</string> | |||||
<key>profile</key> | |||||
<dict> | |||||
<key>UUID</key> | |||||
<string>866bb4b2-d3ab-44f6-80ed-588c8e2e3690</string> | |||||
<key>dateExpires</key> | |||||
<string>2023/3/1</string> | |||||
<key>name</key> | |||||
<string>iOS Team Store Provisioning Profile: com.jjkj.im.im-client-ios</string> | |||||
</dict> | |||||
<key>symbols</key> | |||||
<true/> | |||||
<key>team</key> | |||||
<dict> | |||||
<key>id</key> | |||||
<string>46BSGN46R3</string> | |||||
<key>name</key> | |||||
<string>tao he</string> | |||||
</dict> | |||||
<key>versionNumber</key> | |||||
<string>1.0</string> | |||||
</dict> | |||||
</array> | |||||
</dict> | |||||
</plist> |
@@ -0,0 +1,22 @@ | |||||
<?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>destination</key> | |||||
<string>export</string> | |||||
<key>manageAppVersionAndBuildNumber</key> | |||||
<true/> | |||||
<key>method</key> | |||||
<string>app-store</string> | |||||
<key>signingStyle</key> | |||||
<string>automatic</string> | |||||
<key>stripSwiftSymbols</key> | |||||
<true/> | |||||
<key>teamID</key> | |||||
<string>46BSGN46R3</string> | |||||
<key>uploadBitcode</key> | |||||
<true/> | |||||
<key>uploadSymbols</key> | |||||
<true/> | |||||
</dict> | |||||
</plist> |
@@ -0,0 +1,141 @@ | |||||
2022-03-01 07:41:11 +0000 Initial pipeline context: <IDEDistributionProcessingPipelineContext: 0x2d666f1e0; archive(resolved)="<IDEArchive: 0x2e8611e30>", distributionTask(resolved)="2", distributionDestination(resolved)="1", distributionMethod(resolved)="<IDEDistributionMethodiOSAppStoreDistribution: 0x306e56370>", team(resolved)="<IDEProvisioningDisambiguatableBasicTeam: 0x2f40a7760; teamID='46BSGN46R3', teamName='tao he', teamType='Individual', username='2583017235@qq.com', isFreeProvisioningTeam='0'>"> | |||||
Chain (16, self inclusive): | |||||
<IDEDistributionProcessingPipelineContext: 0x2d666f1e0; archive = "<IDEArchive: 0x2e8611e30>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x306e56370>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x2f40a7760; teamID='46BSGN46R3', teamName='tao he', teamType='Individual', username='2583017235@qq.com', isFreeProvisioningTeam='0'>"> | |||||
<IDEDistributionProcessingPipelineContext: 0x2d93cbeb0; archive = "<IDEArchive: 0x2e8611e30>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x306e56370>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x2f40a7760; teamID='46BSGN46R3', teamName='tao he', teamType='Individual', username='2583017235@qq.com', isFreeProvisioningTeam='0'>"> | |||||
<IDEDistributionContext: 0x2e8106d60; archive = "<IDEArchive: 0x2e8611e30>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x306e56370>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x2f40a7760; teamID='46BSGN46R3', teamName='tao he', teamType='Individual', username='2583017235@qq.com', isFreeProvisioningTeam='0'>"> | |||||
<IDEDistributionContext: 0x2db4062b0; archive = "<IDEArchive: 0x2e8611e30>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x306e56370>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x2f40a7760; teamID='46BSGN46R3', teamName='tao he', teamType='Individual', username='2583017235@qq.com', isFreeProvisioningTeam='0'>"> | |||||
<IDEDistributionContext: 0x2edf3b200; archive = "<IDEArchive: 0x2e8611e30>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x306e56370>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x2f40a7760; teamID='46BSGN46R3', teamName='tao he', teamType='Individual', username='2583017235@qq.com', isFreeProvisioningTeam='0'>"> | |||||
<IDEDistributionContext: 0x2db451af0; archive = "<IDEArchive: 0x2e8611e30>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x306e56370>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x2f40a7760; teamID='46BSGN46R3', teamName='tao he', teamType='Individual', username='2583017235@qq.com', isFreeProvisioningTeam='0'>"> | |||||
<IDEDistributionContext: 0x2edf34130; archive = "<IDEArchive: 0x2e8611e30>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x306e56370>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x2f40a7760; teamID='46BSGN46R3', teamName='tao he', teamType='Individual', username='2583017235@qq.com', isFreeProvisioningTeam='0'>"> | |||||
<IDEDistributionContext: 0x2db42c850; archive = "<IDEArchive: 0x2e8611e30>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x306e56370>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x2f40a7760; teamID='46BSGN46R3', teamName='tao he', teamType='Individual', username='2583017235@qq.com', isFreeProvisioningTeam='0'>"> | |||||
<IDEDistributionContext: 0x2e8120d60; archive = "<IDEArchive: 0x2e8611e30>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x306e56370>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x2f40a7760; teamID='46BSGN46R3', teamName='tao he', teamType='Individual', username='2583017235@qq.com', isFreeProvisioningTeam='0'>"> | |||||
<IDEDistributionContext: 0x2f51fc020; archive = "<IDEArchive: 0x2e8611e30>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x306e56370>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x2f40a7760; teamID='46BSGN46R3', teamName='tao he', teamType='Individual', username='2583017235@qq.com', isFreeProvisioningTeam='0'>"> | |||||
<IDEDistributionContext: 0x2d9bf7950; archive = "<IDEArchive: 0x2e8611e30>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x306e56370>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x2f40a7760; teamID='46BSGN46R3', teamName='tao he', teamType='Individual', username='2583017235@qq.com', isFreeProvisioningTeam='0'>"> | |||||
<IDEDistributionContext: 0x2d5b6be90; archive = "<IDEArchive: 0x2e8611e30>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x306e56370>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x2f40a7760; teamID='46BSGN46R3', teamName='tao he', teamType='Individual', username='2583017235@qq.com', isFreeProvisioningTeam='0'>"> | |||||
<IDEDistributionContext: 0x2d5b67940; archive = "<IDEArchive: 0x2e8611e30>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x306e56370>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x2f40a7760; teamID='46BSGN46R3', teamName='tao he', teamType='Individual', username='2583017235@qq.com', isFreeProvisioningTeam='0'>"> | |||||
<IDEDistributionContext: 0x2db487cf0; archive = "<IDEArchive: 0x2e8611e30>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x306e56370>", team="(null)"> | |||||
<IDEDistributionContext: 0x2d95a9820; archive = "<IDEArchive: 0x2e8611e30>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x306e56370>", team="(null)"> | |||||
<IDEDistributionContext: 0x306e342c0; archive = "<IDEArchive: 0x2e8611e30>", distributionMethod="(null)", team="(null)"> | |||||
</IDEDistributionProcessingPipelineContext: 0x2d666f1e0> | |||||
2022-03-01 07:41:11 +0000 Processing step: IDEDistributionCreateDestRootStep | |||||
2022-03-01 07:41:11 +0000 Processing step: IDEDistributionCopyItemStep | |||||
2022-03-01 07:41:11 +0000 Running /usr/bin/ditto '-V' '/Users/jjkj/Library/Developer/Xcode/Archives/2022-01-04/im-client-ios 2022-1-4, 11.12 AM.xcarchive/Products/Applications/im-client-ios.app' '/var/folders/_3/9m9hc1cs5759slcz3j6zqvp80000gn/T/XcodeDistPipeline.~~~f3uXJx/Root/Payload/im-client-ios.app' | |||||
2022-03-01 07:41:11 +0000 >>> Copying /Users/jjkj/Library/Developer/Xcode/Archives/2022-01-04/im-client-ios 2022-1-4, 11.12 AM.xcarchive/Products/Applications/im-client-ios.app | |||||
2022-03-01 07:41:11 +0000 copying file ./_CodeSignature/CodeResources ... | |||||
2022-03-01 07:41:11 +0000 2111 bytes for ./_CodeSignature/CodeResources | |||||
2022-03-01 07:41:11 +0000 copying file ./im-client-ios ... | |||||
2022-03-01 07:41:11 +0000 230224 bytes for ./im-client-ios | |||||
2022-03-01 07:41:11 +0000 copying file ./embedded.mobileprovision ... | |||||
2022-03-01 07:41:11 +0000 12075 bytes for ./embedded.mobileprovision | |||||
2022-03-01 07:41:11 +0000 copying file ./Info.plist ... | |||||
2022-03-01 07:41:11 +0000 1219 bytes for ./Info.plist | |||||
2022-03-01 07:41:11 +0000 copying file ./PkgInfo ... | |||||
2022-03-01 07:41:11 +0000 8 bytes for ./PkgInfo | |||||
2022-03-01 07:41:11 +0000 /usr/bin/ditto exited with 0 | |||||
2022-03-01 07:41:11 +0000 Processing step: IDEDistributionEmbedProfileStep | |||||
2022-03-01 07:41:11 +0000 Processing step: IDEDistributionInfoPlistStep | |||||
2022-03-01 07:41:11 +0000 Processing step: IDEDistributionItemRemovalStep | |||||
2022-03-01 07:41:11 +0000 Processing step: IDEDistributionAppThinningPlistStep | |||||
2022-03-01 07:41:11 +0000 Skipping step: IDEDistributionAppThinningPlistStep because it said so | |||||
2022-03-01 07:41:11 +0000 Processing step: IDEDistributionCompileBitcodeStep | |||||
2022-03-01 07:41:11 +0000 Skipping step: IDEDistributionCompileBitcodeStep because it said so | |||||
2022-03-01 07:41:11 +0000 Processing step: IDEDistributionCodeSlimmingStep | |||||
2022-03-01 07:41:11 +0000 Running /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/bitcode_strip '/var/folders/_3/9m9hc1cs5759slcz3j6zqvp80000gn/T/XcodeDistPipeline.~~~f3uXJx/Root/Payload/im-client-ios.app/im-client-ios' '-l' '-keep_cs' '-o' '/var/folders/_3/9m9hc1cs5759slcz3j6zqvp80000gn/T/XcodeDistPipeline.~~~f3uXJx/Root/Payload/im-client-ios.app/im-client-ios' | |||||
2022-03-01 07:41:12 +0000 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/bitcode_strip exited with 0 | |||||
2022-03-01 07:41:12 +0000 Processing step: IDEDistributionCopyBCSymbolMapsStep | |||||
2022-03-01 07:41:12 +0000 Running /usr/bin/ditto '-V' '/Users/jjkj/Library/Developer/Xcode/Archives/2022-01-04/im-client-ios 2022-1-4, 11.12 AM.xcarchive/BCSymbolMaps/7F4ABC97-61D4-3CCC-A307-B9C98B81F12D.bcsymbolmap' '/var/folders/_3/9m9hc1cs5759slcz3j6zqvp80000gn/T/XcodeDistPipeline.~~~f3uXJx/Root/BCSymbolMaps/7F4ABC97-61D4-3CCC-A307-B9C98B81F12D.bcsymbolmap' | |||||
2022-03-01 07:41:12 +0000 >>> Copying /Users/jjkj/Library/Developer/Xcode/Archives/2022-01-04/im-client-ios 2022-1-4, 11.12 AM.xcarchive/BCSymbolMaps/7F4ABC97-61D4-3CCC-A307-B9C98B81F12D.bcsymbolmap | |||||
2022-03-01 07:41:12 +0000 copying file ./7F4ABC97-61D4-3CCC-A307-B9C98B81F12D.bcsymbolmap ... | |||||
2022-03-01 07:41:12 +0000 12978 bytes for ./7F4ABC97-61D4-3CCC-A307-B9C98B81F12D.bcsymbolmap | |||||
2022-03-01 07:41:12 +0000 /usr/bin/ditto exited with 0 | |||||
2022-03-01 07:41:12 +0000 Processing step: IDEDistributionSymbolsStep | |||||
2022-03-01 07:41:12 +0000 Excluding symbols for im-client-ios.app | |||||
2022-03-01 07:41:12 +0000 Processing step: IDEDistributionCopyAppleProvidedContentStep | |||||
2022-03-01 07:41:12 +0000 Processing step: IDEDistributionAppThinningStep | |||||
2022-03-01 07:41:12 +0000 Skipping step: IDEDistributionAppThinningStep because it said so | |||||
2022-03-01 07:41:12 +0000 Processing step: IDEDistributionArchThinningStep | |||||
2022-03-01 07:41:12 +0000 Running /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo '/var/folders/_3/9m9hc1cs5759slcz3j6zqvp80000gn/T/XcodeDistPipeline.~~~f3uXJx/Root/Payload/im-client-ios.app/im-client-ios' '-verify_arch' 'arm64e' | |||||
2022-03-01 07:41:12 +0000 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo exited with 1 | |||||
2022-03-01 07:41:12 +0000 Skipping architecture thinning for item "im-client-ios" because arch "arm64e" wasn't found | |||||
2022-03-01 07:41:12 +0000 Processing step: IDEDistributionODRStep | |||||
2022-03-01 07:41:12 +0000 Processing step: IDEDistributionStripXattrsStep | |||||
2022-03-01 07:41:12 +0000 Running /usr/bin/xattr '-crs' '/var/folders/_3/9m9hc1cs5759slcz3j6zqvp80000gn/T/XcodeDistPipeline.~~~f3uXJx/Root/Payload/im-client-ios.app' | |||||
2022-03-01 07:41:12 +0000 /usr/bin/xattr exited with 0 | |||||
2022-03-01 07:41:12 +0000 Processing step: IDEDistributionCodesignStep | |||||
2022-03-01 07:41:12 +0000 Entitlements for <IDEDistributionItem: 0x2eab8abd0; bundleID='com.jjkj.im.im-client-ios', path='<DVTFilePath:0x2ecb9d3f0:'/Users/jjkj/Library/Developer/Xcode/Archives/2022-01-04/im-client-ios 2022-1-4, 11.12 AM.xcarchive/Products/Applications/im-client-ios.app'>', codeSigningInfo='<_DVTCodeSigningInformation_Path: 0x2e82b1b50; isSigned='1', isAdHocSigned='0', signingCertificate='<DVTSigningCertificate: 0x2cb5d9790; name='Apple Development: 2583017235@qq.com (284H23RQPW)', hash='23805094E291817812A71D3D4814434CA7352395', serialNumber='26FC937950785664134BC56B2526179B', certificateKinds='( | |||||
"1.2.840.113635.100.6.1.12", | |||||
"1.2.840.113635.100.6.1.2" | |||||
), issueDate='2021-12-29 07:51:27 +0000''>', entitlements='{ | |||||
"application-identifier" = "46BSGN46R3.com.jjkj.im.im-client-ios"; | |||||
"com.apple.developer.team-identifier" = 46BSGN46R3; | |||||
"get-task-allow" = 1; | |||||
"keychain-access-groups" = ( | |||||
"46BSGN46R3.com.jjkj.im.im-client-ios" | |||||
); | |||||
}', teamID='46BSGN46R3', identifier='com.jjkj.im.im-client-ios', executablePath='<DVTFilePath:0x2e8248f20:'/Users/jjkj/Library/Developer/Xcode/Archives/2022-01-04/im-client-ios 2022-1-4, 11.12 AM.xcarchive/Products/Applications/im-client-ios.app/im-client-ios'>', hardenedRuntime='0'>'>: { | |||||
"application-identifier" = "46BSGN46R3.com.jjkj.im.im-client-ios"; | |||||
"beta-reports-active" = 1; | |||||
"com.apple.developer.team-identifier" = 46BSGN46R3; | |||||
"get-task-allow" = 0; | |||||
"keychain-access-groups" = ( | |||||
"46BSGN46R3.com.jjkj.im.im-client-ios" | |||||
); | |||||
} | |||||
2022-03-01 07:41:12 +0000 Entitlements for <IDEDistributionItem: 0x2eab8abd0; bundleID='com.jjkj.im.im-client-ios', path='<DVTFilePath:0x2ecb9d3f0:'/Users/jjkj/Library/Developer/Xcode/Archives/2022-01-04/im-client-ios 2022-1-4, 11.12 AM.xcarchive/Products/Applications/im-client-ios.app'>', codeSigningInfo='<_DVTCodeSigningInformation_Path: 0x2e82b1b50; isSigned='1', isAdHocSigned='0', signingCertificate='<DVTSigningCertificate: 0x2ca6be9b0; name='Apple Development: 2583017235@qq.com (284H23RQPW)', hash='23805094E291817812A71D3D4814434CA7352395', serialNumber='26FC937950785664134BC56B2526179B', certificateKinds='( | |||||
"1.2.840.113635.100.6.1.12", | |||||
"1.2.840.113635.100.6.1.2" | |||||
), issueDate='2021-12-29 07:51:27 +0000''>', entitlements='{ | |||||
"application-identifier" = "46BSGN46R3.com.jjkj.im.im-client-ios"; | |||||
"com.apple.developer.team-identifier" = 46BSGN46R3; | |||||
"get-task-allow" = 1; | |||||
"keychain-access-groups" = ( | |||||
"46BSGN46R3.com.jjkj.im.im-client-ios" | |||||
); | |||||
}', teamID='46BSGN46R3', identifier='com.jjkj.im.im-client-ios', executablePath='<DVTFilePath:0x2e8248f20:'/Users/jjkj/Library/Developer/Xcode/Archives/2022-01-04/im-client-ios 2022-1-4, 11.12 AM.xcarchive/Products/Applications/im-client-ios.app/im-client-ios'>', hardenedRuntime='0'>'> are: { | |||||
"application-identifier" = "46BSGN46R3.com.jjkj.im.im-client-ios"; | |||||
"beta-reports-active" = 1; | |||||
"com.apple.developer.team-identifier" = 46BSGN46R3; | |||||
"get-task-allow" = 0; | |||||
"keychain-access-groups" = ( | |||||
"46BSGN46R3.com.jjkj.im.im-client-ios" | |||||
); | |||||
} | |||||
2022-03-01 07:41:12 +0000 Writing entitlements for <IDEDistributionItem: 0x2eab8abd0; bundleID='com.jjkj.im.im-client-ios', path='<DVTFilePath:0x2ecb9d3f0:'/Users/jjkj/Library/Developer/Xcode/Archives/2022-01-04/im-client-ios 2022-1-4, 11.12 AM.xcarchive/Products/Applications/im-client-ios.app'>', codeSigningInfo='<_DVTCodeSigningInformation_Path: 0x2e82b1b50; isSigned='1', isAdHocSigned='0', signingCertificate='<DVTSigningCertificate: 0x2da10bb40; name='Apple Development: 2583017235@qq.com (284H23RQPW)', hash='23805094E291817812A71D3D4814434CA7352395', serialNumber='26FC937950785664134BC56B2526179B', certificateKinds='( | |||||
"1.2.840.113635.100.6.1.12", | |||||
"1.2.840.113635.100.6.1.2" | |||||
), issueDate='2021-12-29 07:51:27 +0000''>', entitlements='{ | |||||
"application-identifier" = "46BSGN46R3.com.jjkj.im.im-client-ios"; | |||||
"com.apple.developer.team-identifier" = 46BSGN46R3; | |||||
"get-task-allow" = 1; | |||||
"keychain-access-groups" = ( | |||||
"46BSGN46R3.com.jjkj.im.im-client-ios" | |||||
); | |||||
}', teamID='46BSGN46R3', identifier='com.jjkj.im.im-client-ios', executablePath='<DVTFilePath:0x2e8248f20:'/Users/jjkj/Library/Developer/Xcode/Archives/2022-01-04/im-client-ios 2022-1-4, 11.12 AM.xcarchive/Products/Applications/im-client-ios.app/im-client-ios'>', hardenedRuntime='0'>'> to: /var/folders/_3/9m9hc1cs5759slcz3j6zqvp80000gn/T/XcodeDistPipeline.~~~f3uXJx/entitlements~~~vLGKOv | |||||
2022-03-01 07:41:12 +0000 Running /usr/bin/codesign '-vvv' '--force' '--sign' 'BA0E100A84D64D30C69ACAB19CB96D95BB4428B7' '--entitlements' '/var/folders/_3/9m9hc1cs5759slcz3j6zqvp80000gn/T/XcodeDistPipeline.~~~f3uXJx/entitlements~~~vLGKOv' '--generate-entitlement-der' '--preserve-metadata=identifier,flags,runtime' '/var/folders/_3/9m9hc1cs5759slcz3j6zqvp80000gn/T/XcodeDistPipeline.~~~f3uXJx/Root/Payload/im-client-ios.app' | |||||
2022-03-01 07:41:12 +0000 /var/folders/_3/9m9hc1cs5759slcz3j6zqvp80000gn/T/XcodeDistPipeline.~~~f3uXJx/Root/Payload/im-client-ios.app: replacing existing signature | |||||
2022-03-01 07:41:18 +0000 /var/folders/_3/9m9hc1cs5759slcz3j6zqvp80000gn/T/XcodeDistPipeline.~~~f3uXJx/Root/Payload/im-client-ios.app: signed app bundle with Mach-O thin (arm64) [com.jjkj.im.im-client-ios] | |||||
2022-03-01 07:41:18 +0000 /usr/bin/codesign exited with 0 | |||||
2022-03-01 07:41:18 +0000 Processing step: IDEDistributionZipODRItemStep | |||||
2022-03-01 07:41:18 +0000 Skipping step: IDEDistributionZipODRItemStep because it said so | |||||
2022-03-01 07:41:18 +0000 Processing step: IDEDistributionCreateIPAStep | |||||
2022-03-01 07:41:18 +0000 Running /usr/bin/ditto '-V' '-c' '-k' '--norsrc' '/var/folders/_3/9m9hc1cs5759slcz3j6zqvp80000gn/T/XcodeDistPipeline.~~~f3uXJx/Root' '/var/folders/_3/9m9hc1cs5759slcz3j6zqvp80000gn/T/XcodeDistPipeline.~~~f3uXJx/Packages/im-client-ios.ipa' | |||||
2022-03-01 07:41:18 +0000 >>> Copying /var/folders/_3/9m9hc1cs5759slcz3j6zqvp80000gn/T/XcodeDistPipeline.~~~f3uXJx/Root | |||||
2022-03-01 07:41:18 +0000 copying file ./BCSymbolMaps/7F4ABC97-61D4-3CCC-A307-B9C98B81F12D.bcsymbolmap ... | |||||
2022-03-01 07:41:18 +0000 12978 bytes for ./BCSymbolMaps/7F4ABC97-61D4-3CCC-A307-B9C98B81F12D.bcsymbolmap | |||||
2022-03-01 07:41:18 +0000 copying file ./Payload/im-client-ios.app/_CodeSignature/CodeResources ... | |||||
2022-03-01 07:41:18 +0000 2111 bytes for ./Payload/im-client-ios.app/_CodeSignature/CodeResources | |||||
2022-03-01 07:41:18 +0000 copying file ./Payload/im-client-ios.app/im-client-ios ... | |||||
2022-03-01 07:41:18 +0000 174448 bytes for ./Payload/im-client-ios.app/im-client-ios | |||||
copying file ./Payload/im-client-ios.app/embedded.mobileprovision ... | |||||
2022-03-01 07:41:18 +0000 14209 bytes for ./Payload/im-client-ios.app/embedded.mobileprovision | |||||
copying file ./Payload/im-client-ios.app/Info.plist ... | |||||
2022-03-01 07:41:18 +0000 1219 bytes for ./Payload/im-client-ios.app/Info.plist | |||||
copying file ./Payload/im-client-ios.app/PkgInfo ... | |||||
2022-03-01 07:41:18 +0000 8 bytes for ./Payload/im-client-ios.app/PkgInfo | |||||
2022-03-01 07:41:18 +0000 /usr/bin/ditto exited with 0 | |||||
2022-03-01 07:41:18 +0000 Processing step: IDEDistributionAppStoreInformationStep | |||||
2022-03-01 07:41:18 +0000 Skipping step: IDEDistributionAppStoreInformationStep because it said so | |||||
2022-03-01 07:41:18 +0000 Processing step: IDEDistributionGenerateProcessedDistributionItems | |||||
2022-03-01 07:41:18 +0000 IDEDistributionItem init <DVTFilePath:0x2d68cb230:'/var/folders/_3/9m9hc1cs5759slcz3j6zqvp80000gn/T/XcodeDistPipeline.~~~f3uXJx/Root/Payload/im-client-ios.app'> | |||||
2022-03-01 07:41:18 +0000 Processing step: IDEDistributionCreateManifestStep | |||||
2022-03-01 07:41:18 +0000 Skipping step: IDEDistributionCreateManifestStep because it said so |
@@ -0,0 +1,33 @@ | |||||
// | |||||
// SysInfo.swift | |||||
// ywt-client-ios | |||||
// | |||||
// Created by 北京居家科技有限公司 on 2022/3/23. | |||||
// | |||||
import Foundation | |||||
struct SysInfo : Encodable { | |||||
var versionName: String; | |||||
var versionCode: String; | |||||
var is_dev: Bool; | |||||
var device_key: UUID; | |||||
var device_type: String; | |||||
var device_model: String; | |||||
var device_sys_version: String; | |||||
var device_screen_width: Double; | |||||
var device_screen_height: Double; | |||||
init(versionName: String, versionCode: String, is_dev: Bool, device_key: UUID, device_type: String, | |||||
device_model: String, device_sys_version: String, device_screen_width: Double, device_screen_height: Double) { | |||||
self.versionName = versionName | |||||
self.versionCode = versionCode | |||||
self.is_dev = is_dev | |||||
self.device_key = device_key | |||||
self.device_type = device_type | |||||
self.device_model = device_model | |||||
self.device_sys_version = device_sys_version | |||||
self.device_screen_width = device_screen_width | |||||
self.device_screen_height = device_screen_height | |||||
} | |||||
} |
@@ -0,0 +1,8 @@ | |||||
// | |||||
// testFile.swift | |||||
// im-client-ios | |||||
// | |||||
// Created by 北京居家科技有限公司 on 2022/2/16. | |||||
// | |||||
import SwiftUI |
@@ -0,0 +1,298 @@ | |||||
// | |||||
// WebView.swift | |||||
// im-client-ios | |||||
// | |||||
// Created by 北京居家科技有限公司 on 2021/12/30. | |||||
// | |||||
import WebKit | |||||
import Alamofire | |||||
import SwiftUI | |||||
import UserNotifications | |||||
var token: String?; | |||||
var uploadUrl: String?; | |||||
class WebViewUI: UIViewController, WKUIDelegate, WKNavigationDelegate, WKScriptMessageHandler,UNUserNotificationCenterDelegate, | |||||
UIImagePickerControllerDelegate & UINavigationControllerDelegate { | |||||
func getDictionaryFromJSONString(jsonString:String) ->NSDictionary{ | |||||
let jsonData:Data = jsonString.data(using: .utf8)! | |||||
let dict = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) | |||||
if dict != nil { | |||||
return dict as! NSDictionary | |||||
} | |||||
return NSDictionary() | |||||
} | |||||
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { | |||||
//判断消息通道 | |||||
if(message.name == "photoAlbum"){ | |||||
print(message.body); | |||||
var NSDictionary = getDictionaryFromJSONString(jsonString: message.body as! String); | |||||
token = NSDictionary.value(forKey: "token") as! String; | |||||
uploadUrl = NSDictionary.value(forKey: "uploadUrl") as! String; | |||||
// 相册 | |||||
openAlbum(); | |||||
} | |||||
if(message.name == "takePhoto"){ | |||||
// 相机 | |||||
openCamera(); | |||||
print(message.body); | |||||
} | |||||
if(message.name == "scan"){ | |||||
// 扫一扫 | |||||
SwiftQRCodeVC(); | |||||
print(message.body); | |||||
} | |||||
if(message.name == "fileChoose"){ | |||||
// UserNotificationManager.instance.sendNotification(title: "何涛", body: "我什么也不知道呀") | |||||
// UIApplication.shared.applicationIconBadgeNumber = 1 | |||||
// openFileSelect(); | |||||
print("message.body"); | |||||
print(message.body); | |||||
} | |||||
if(message.name == "getSysInfo"){ | |||||
getSysInfo(); | |||||
} | |||||
if(message.name == "sendMessage"){ | |||||
let NSDictionary = getDictionaryFromJSONString(jsonString: message.body as! String); | |||||
let title = NSDictionary.value(forKey: "title") as! String; | |||||
let body = NSDictionary.value(forKey: "body") as! String; | |||||
UserNotificationManager.instance.sendNotification(title: title, body: body) | |||||
UIApplication.shared.applicationIconBadgeNumber = 1 | |||||
print(message.body); | |||||
} | |||||
} | |||||
// 将进入前台通知 | |||||
@objc func appWillEnterForeground(){ | |||||
UIApplication.shared.applicationIconBadgeNumber = 0 | |||||
print("周期 ---将进入前台通知") | |||||
} | |||||
//应用程序确实进入了后台 | |||||
@objc func appDidEnterBackground(){ | |||||
print("周期 ---应用程序确实进入了后台") | |||||
} | |||||
var webView:WKWebView! | |||||
override func loadView() { | |||||
let webConfiguration = WKWebViewConfiguration(); | |||||
// 创建UserContentController(提供JavaScript向webView发送消息的方法) | |||||
let userContent = WKUserContentController() | |||||
// 添加消息处理,注意:self指代的对象需要遵守WKScriptMessageHandler协议,结束时需要移除 | |||||
userContent.add(self, name: "photoAlbum"); | |||||
userContent.add(self, name: "takePhoto"); | |||||
userContent.add(self, name: "fileChoose"); | |||||
userContent.add(self, name: "sendMessage"); | |||||
userContent.add(self, name: "getSysInfo"); | |||||
userContent.add(self, name: "scan"); | |||||
// userContent.add(Dsbridge()); | |||||
// 将UserConttentController设置到配置文件 | |||||
webConfiguration.userContentController = userContent | |||||
webView = WKWebView(frame: .zero, configuration: webConfiguration); | |||||
// UI代理 | |||||
webView.uiDelegate = self; | |||||
// 是否允许手势左滑返回上一级, 类似导航控制的左滑返回 | |||||
webView.allowsBackForwardNavigationGestures = true; | |||||
view = webView; | |||||
UserNotificationManager.instance.requestAuthorization() | |||||
} | |||||
override func viewDidLoad() { | |||||
super.viewDidLoad() | |||||
let timestamp = Date().timeIntervalSince1970 | |||||
let timeStamp3 = CLongLong(round(timestamp*1000)) | |||||
let myURL = URL(string:"http://www.jujiaservice.com/jjkj/app/?t=" + "\(timeStamp3)") | |||||
let myRequest = URLRequest(url: myURL!) | |||||
NotificationCenter.default.addObserver(self, selector: #selector(appWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil) | |||||
NotificationCenter.default.addObserver(self, selector: #selector(appDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil) | |||||
webView.load(myRequest) | |||||
} | |||||
override func viewWillDisappear(_ animated: Bool) { | |||||
super.viewWillDisappear(animated) | |||||
//当前ViewController销毁前将其移除,否则会造成内存泄漏 | |||||
self.webView?.configuration.userContentController.removeScriptMessageHandler(forName: "photoAlbum") //移除方法 | |||||
self.webView?.configuration.userContentController.removeScriptMessageHandler(forName: "takePhoto") | |||||
self.webView?.configuration.userContentController.removeScriptMessageHandler(forName: "fileChoose") | |||||
self.webView?.configuration.userContentController.removeScriptMessageHandler(forName: "sendMessage") | |||||
self.webView?.configuration.userContentController.removeScriptMessageHandler(forName: "scan") | |||||
self.webView?.configuration.userContentController.removeScriptMessageHandler(forName: "getSysInfo") | |||||
} | |||||
override func didReceiveMemoryWarning() { | |||||
super.didReceiveMemoryWarning() | |||||
} | |||||
//选择图片成功后代理 | |||||
@objc func imagePickerController(_ picker: UIImagePickerController, | |||||
didFinishPickingMediaWithInfo info: [String :Any]) { | |||||
//获取选择的原图 | |||||
let image = info[UIImagePickerController.InfoKey.originalImage.rawValue]as! UIImage; | |||||
if image != nil { | |||||
// // 将图片转化成Data | |||||
// let imageData = image.jpegData (compressionQuality: 1.0) | |||||
// // 将Data转化成 base64的字符串 | |||||
// let imageBase64String = imageData?.base64EncodedString() | |||||
// print(image) | |||||
// let s: String = "json.rawString()!"; | |||||
// self.webView.evaluateJavaScript("taskPathCallBack('" + imageBase64String! + "')") {(data, error) in | |||||
// | |||||
// } | |||||
uploadFile(pickedImage: image); | |||||
} | |||||
// imageView.image = image | |||||
//图片控制器退出 | |||||
picker.dismiss(animated: true, completion: { | |||||
() -> Void in | |||||
}) | |||||
} | |||||
func toolsChangeToJson(info: Any) -> String{ | |||||
//首先判断能不能转换 | |||||
guard JSONSerialization.isValidJSONObject(info) else { | |||||
return "" | |||||
} | |||||
//如果设置options为JSONSerialization.WritingOptions.prettyPrinted,则打印格式更好阅读 | |||||
let jsonData = try? JSONSerialization.data(withJSONObject: info, options: []) | |||||
if let jsonData = jsonData { | |||||
let str = String(data: jsonData, encoding: String.Encoding.utf8) | |||||
return str ?? "" | |||||
}else { | |||||
return "" | |||||
} | |||||
} | |||||
func uploadFile(pickedImage: UIImage) { | |||||
var httpHeaders = HTTPHeaders.init(); | |||||
httpHeaders.add(name: "Auth-Token", value: token ?? ""); | |||||
let AF = Session.init(); | |||||
AF.upload(multipartFormData: { (data) in | |||||
data.append(pickedImage.jpegData(compressionQuality: 0.6)!, withName: "file",fileName: "\(Date().timeIntervalSince1970).jpg",mimeType: "image/jpeg") | |||||
}, to: "http://39.98.219.177:8787"+(uploadUrl ?? ""), headers: httpHeaders) | |||||
.responseJSON { response in | |||||
// debugPrint(response) | |||||
switch response.result { | |||||
case let .success(json) : | |||||
print(json) | |||||
self.webView.evaluateJavaScript("taskPathCallBack('" + self.toolsChangeToJson(info: json) + "')") {(data, error) in | |||||
} | |||||
fallthrough | |||||
default : | |||||
print("失败"); | |||||
} | |||||
// print(response.result); | |||||
// getJSONStringFromDictionary(dictionary: response.data); | |||||
} | |||||
} | |||||
// 相册相机都要移除到一个新的类里面去-暂时全部写到这里 | |||||
//打开相册 | |||||
func openAlbum(){ | |||||
//判断设置是否支持图片库 | |||||
if (UIImagePickerController.isSourceTypeAvailable(.photoLibrary)){ | |||||
//初始化图片控制器 | |||||
let picker = UIImagePickerController() | |||||
//设置代理 | |||||
picker.delegate = self | |||||
//指定图片控制器类型 | |||||
picker.sourceType = UIImagePickerController.SourceType .photoLibrary | |||||
//设置是否允许编辑 | |||||
// picker.allowsEditing = editSwitch.on | |||||
//弹出控制器,显示界面 | |||||
self.present(picker, animated:true, completion: { | |||||
() -> Void in | |||||
}) | |||||
} else { | |||||
print("读取相册错误") | |||||
} | |||||
} | |||||
// 打开相机 | |||||
func openCamera(){ | |||||
if(UIImagePickerController.isSourceTypeAvailable(.camera)){ | |||||
//创建图片控制器 | |||||
let picker = UIImagePickerController() | |||||
//设置代理 | |||||
picker.delegate = self | |||||
//设置来源 | |||||
picker.sourceType = UIImagePickerController.SourceType.camera | |||||
//允许编辑 | |||||
picker.allowsEditing = true | |||||
//打开相机 | |||||
self.present(picker, animated:true, completion: { () -> Void in | |||||
}) | |||||
} else { | |||||
debugPrint("找不到相机") | |||||
} | |||||
} | |||||
// 打开文件选择器 | |||||
func openFileSelect() { | |||||
// let importMenu = UIDocumentMenuViewController(documentTypes: [String(kUTTypePDF)], in: .import) | |||||
// importMenu.delegate = self | |||||
// importMenu.modalPresentationStyle = .formSheet | |||||
// self.present(importMenu, animated: true, completion: nil) | |||||
} | |||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { | |||||
let options:UNAuthorizationOptions = [.alert, .sound] | |||||
UNUserNotificationCenter.current().requestAuthorization(options: options) { (success, error) in | |||||
if let info = error?.localizedDescription { | |||||
print(info) | |||||
} | |||||
} | |||||
return true; | |||||
} | |||||
///请求完成后会调用把获取的deviceToken返回给我们 | |||||
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { | |||||
//deviceToken = 32 bytes | |||||
print("deviceToken = \(deviceToken)") | |||||
let deviceToken = deviceToken.map { String(format: "%02.2hhx", arguments: [$0]) }.joined(); | |||||
self.webView.evaluateJavaScript("iosDeviceToken('" + deviceToken + "')") {(data, error) in | |||||
} | |||||
//FIXME:打印推送64位token | |||||
print( deviceToken, "推送 deviceToken" ) | |||||
} | |||||
func getSysInfo() { | |||||
let infoDictionary = Bundle .main.infoDictionary! | |||||
let appVersion = infoDictionary["CFBundleShortVersionString"] as? String | |||||
let appDisplayName = infoDictionary[ "CFBundleDisplayName" ] //程序名称 | |||||
let iosVersion = UIDevice.current.systemVersion //iOS版本 | |||||
let identifierNumber = UIDevice.current.identifierForVendor //设备udid | |||||
let systemName = UIDevice.current.systemName //设备名称 | |||||
let model = UIDevice.current.model //设备型号 | |||||
let localizedModel = UIDevice .current.localizedModel //设备区域化型号如A1533 | |||||
let screenh = UIScreen.main.applicationFrame.size.height | |||||
let screenw = UIScreen.main.applicationFrame.size.width | |||||
let m = (versionName: appDisplayName, versionCode: appVersion,is_dev: false, device_key: identifierNumber | |||||
,device_type: "ios", device_model: model, device_sys_version: model | |||||
,device_screen_width: screenw, device_screen_height: screenh); | |||||
var sysInfo = SysInfo.init(versionName: appDisplayName as! String, versionCode: appVersion ?? "", is_dev: false, device_key: identifierNumber ?? UUID.init(), device_type: "ios", device_model: model, device_sys_version: model, device_screen_width: screenw, device_screen_height: screenh); | |||||
let jsonData = try! JSONEncoder().encode(sysInfo) | |||||
let jsonString = String(data: jsonData, encoding: .utf8) | |||||
// let data = try? JSONSerialization.data(withJSONObject: sysInfo, options: JSONSerialization.WritingOptions.init(rawValue: 0)) | |||||
// let jsonStr = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) | |||||
print(jsonString); | |||||
self.webView.evaluateJavaScript("getSysInfoCallBack('" + (jsonString ?? "") + "')") {(data, error) in | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,8 @@ | |||||
// | |||||
// 对的.m | |||||
// im-client-ios | |||||
// | |||||
// Created by 北京居家科技有限公司 on 2022/3/11. | |||||
// | |||||
#import <Foundation/Foundation.h> |
@@ -0,0 +1,36 @@ | |||||
// | |||||
// im_client_iosTests.swift | |||||
// im-client-iosTests | |||||
// | |||||
// Created by 北京居家科技有限公司 on 2021/12/27. | |||||
// | |||||
import XCTest | |||||
@testable import im_client_ios | |||||
class im_client_iosTests: XCTestCase { | |||||
override func setUpWithError() throws { | |||||
// Put setup code here. This method is called before the invocation of each test method in the class. | |||||
} | |||||
override func tearDownWithError() throws { | |||||
// Put teardown code here. This method is called after the invocation of each test method in the class. | |||||
} | |||||
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. | |||||
// Any test you write for XCTest can be annotated as throws and async. | |||||
// Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. | |||||
// Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. | |||||
} | |||||
func testPerformanceExample() throws { | |||||
// This is an example of a performance test case. | |||||
self.measure { | |||||
// Put the code you want to measure the time of here. | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,42 @@ | |||||
// | |||||
// im_client_iosUITests.swift | |||||
// im-client-iosUITests | |||||
// | |||||
// Created by 北京居家科技有限公司 on 2021/12/27. | |||||
// | |||||
import XCTest | |||||
class im_client_iosUITests: XCTestCase { | |||||
override func setUpWithError() throws { | |||||
// Put setup code here. This method is called before the invocation of each test method in the class. | |||||
// In UI tests it is usually best to stop immediately when a failure occurs. | |||||
continueAfterFailure = false | |||||
// In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. | |||||
} | |||||
override func tearDownWithError() throws { | |||||
// Put teardown code here. This method is called after the invocation of each test method in the class. | |||||
} | |||||
func testExample() throws { | |||||
// UI tests must launch the application that they test. | |||||
let app = XCUIApplication() | |||||
app.launch() | |||||
// Use recording to get started writing UI tests. | |||||
// Use XCTAssert and related functions to verify your tests produce the correct results. | |||||
} | |||||
func testLaunchPerformance() throws { | |||||
if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { | |||||
// This measures how long it takes to launch your application. | |||||
measure(metrics: [XCTApplicationLaunchMetric()]) { | |||||
XCUIApplication().launch() | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,32 @@ | |||||
// | |||||
// im_client_iosUITestsLaunchTests.swift | |||||
// im-client-iosUITests | |||||
// | |||||
// Created by 北京居家科技有限公司 on 2021/12/27. | |||||
// | |||||
import XCTest | |||||
class im_client_iosUITestsLaunchTests: XCTestCase { | |||||
override class var runsForEachTargetApplicationUIConfiguration: Bool { | |||||
true | |||||
} | |||||
override func setUpWithError() throws { | |||||
continueAfterFailure = false | |||||
} | |||||
func testLaunch() throws { | |||||
let app = XCUIApplication() | |||||
app.launch() | |||||
// Insert steps here to perform after app launch but before taking a screenshot, | |||||
// such as logging into a test account or navigating somewhere in the app | |||||
let attachment = XCTAttachment(screenshot: app.screenshot()) | |||||
attachment.name = "Launch Screen" | |||||
attachment.lifetime = .keepAlways | |||||
add(attachment) | |||||
} | |||||
} |
@@ -0,0 +1,5 @@ | |||||
<?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/> | |||||
</plist> |
@@ -0,0 +1,7 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<Workspace | |||||
version = "1.0"> | |||||
<FileRef | |||||
location = "self:/Users/jjkj/Desktop/ywt-client-ios/ywt-client-ios.xcodeproj"> | |||||
</FileRef> | |||||
</Workspace> |
@@ -0,0 +1,8 @@ | |||||
<?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>IDEDidComputeMac32BitWarning</key> | |||||
<true/> | |||||
</dict> | |||||
</plist> |
@@ -0,0 +1,5 @@ | |||||
<?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"> | |||||
<array/> | |||||
</plist> |
@@ -0,0 +1,98 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<Scheme | |||||
LastUpgradeVersion = "1320" | |||||
version = "1.3"> | |||||
<BuildAction | |||||
parallelizeBuildables = "YES" | |||||
buildImplicitDependencies = "YES"> | |||||
<BuildActionEntries> | |||||
<BuildActionEntry | |||||
buildForTesting = "YES" | |||||
buildForRunning = "YES" | |||||
buildForProfiling = "YES" | |||||
buildForArchiving = "YES" | |||||
buildForAnalyzing = "YES"> | |||||
<BuildableReference | |||||
BuildableIdentifier = "primary" | |||||
BlueprintIdentifier = "8427CB6F2779C57800FFEAF8" | |||||
BuildableName = "ywt-client-ios.app" | |||||
BlueprintName = "ywt-client-ios" | |||||
ReferencedContainer = "container:ywt-client-ios.xcodeproj"> | |||||
</BuildableReference> | |||||
</BuildActionEntry> | |||||
</BuildActionEntries> | |||||
</BuildAction> | |||||
<TestAction | |||||
buildConfiguration = "Debug" | |||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | |||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | |||||
shouldUseLaunchSchemeArgsEnv = "YES"> | |||||
<Testables> | |||||
<TestableReference | |||||
skipped = "NO"> | |||||
<BuildableReference | |||||
BuildableIdentifier = "primary" | |||||
BlueprintIdentifier = "8427CB7F2779C57B00FFEAF8" | |||||
BuildableName = "ywt-client-iosTests.xctest" | |||||
BlueprintName = "ywt-client-iosTests" | |||||
ReferencedContainer = "container:ywt-client-ios.xcodeproj"> | |||||
</BuildableReference> | |||||
</TestableReference> | |||||
<TestableReference | |||||
skipped = "NO"> | |||||
<BuildableReference | |||||
BuildableIdentifier = "primary" | |||||
BlueprintIdentifier = "8427CB892779C57B00FFEAF8" | |||||
BuildableName = "ywt-client-iosUITests.xctest" | |||||
BlueprintName = "ywt-client-iosUITests" | |||||
ReferencedContainer = "container:ywt-client-ios.xcodeproj"> | |||||
</BuildableReference> | |||||
</TestableReference> | |||||
</Testables> | |||||
</TestAction> | |||||
<LaunchAction | |||||
buildConfiguration = "Release" | |||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | |||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | |||||
launchStyle = "0" | |||||
useCustomWorkingDirectory = "NO" | |||||
ignoresPersistentStateOnLaunch = "NO" | |||||
debugDocumentVersioning = "YES" | |||||
debugServiceExtension = "internal" | |||||
allowLocationSimulation = "YES"> | |||||
<BuildableProductRunnable | |||||
runnableDebuggingMode = "0"> | |||||
<BuildableReference | |||||
BuildableIdentifier = "primary" | |||||
BlueprintIdentifier = "8427CB6F2779C57800FFEAF8" | |||||
BuildableName = "ywt-client-ios.app" | |||||
BlueprintName = "ywt-client-ios" | |||||
ReferencedContainer = "container:ywt-client-ios.xcodeproj"> | |||||
</BuildableReference> | |||||
</BuildableProductRunnable> | |||||
</LaunchAction> | |||||
<ProfileAction | |||||
buildConfiguration = "Release" | |||||
shouldUseLaunchSchemeArgsEnv = "YES" | |||||
savedToolIdentifier = "" | |||||
useCustomWorkingDirectory = "NO" | |||||
debugDocumentVersioning = "YES"> | |||||
<BuildableProductRunnable | |||||
runnableDebuggingMode = "0"> | |||||
<BuildableReference | |||||
BuildableIdentifier = "primary" | |||||
BlueprintIdentifier = "8427CB6F2779C57800FFEAF8" | |||||
BuildableName = "ywt-client-ios.app" | |||||
BlueprintName = "ywt-client-ios" | |||||
ReferencedContainer = "container:ywt-client-ios.xcodeproj"> | |||||
</BuildableReference> | |||||
</BuildableProductRunnable> | |||||
</ProfileAction> | |||||
<AnalyzeAction | |||||
buildConfiguration = "Debug"> | |||||
</AnalyzeAction> | |||||
<ArchiveAction | |||||
buildConfiguration = "Release" | |||||
revealArchiveInOrganizer = "YES"> | |||||
</ArchiveAction> | |||||
</Scheme> |
@@ -0,0 +1,168 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<Bucket | |||||
uuid = "F82B735C-761A-4DF0-A5A8-CF4E40B44C60" | |||||
type = "1" | |||||
version = "2.0"> | |||||
<Breakpoints> | |||||
<BreakpointProxy | |||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> | |||||
<BreakpointContent | |||||
uuid = "AE584030-DF90-493C-9BCA-CD97ED5E3C26" | |||||
shouldBeEnabled = "No" | |||||
ignoreCount = "0" | |||||
continueAfterRunningActions = "No" | |||||
filePath = "im-client-ios/webview/WebViewUI.swift" | |||||
startingColumnNumber = "9223372036854775807" | |||||
endingColumnNumber = "9223372036854775807" | |||||
startingLineNumber = "30" | |||||
endingLineNumber = "30" | |||||
landmarkName = "userContentController(_:didReceive:)" | |||||
landmarkType = "7"> | |||||
</BreakpointContent> | |||||
</BreakpointProxy> | |||||
<BreakpointProxy | |||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> | |||||
<BreakpointContent | |||||
uuid = "D0767B2E-02D7-443D-BA7D-DC125B517989" | |||||
shouldBeEnabled = "No" | |||||
ignoreCount = "0" | |||||
continueAfterRunningActions = "No" | |||||
filePath = "im-client-ios/dsbridge/Dsbridge.swift" | |||||
startingColumnNumber = "9223372036854775807" | |||||
endingColumnNumber = "9223372036854775807" | |||||
startingLineNumber = "14" | |||||
endingLineNumber = "14" | |||||
landmarkName = "testSyn(_:)" | |||||
landmarkType = "7"> | |||||
</BreakpointContent> | |||||
</BreakpointProxy> | |||||
<BreakpointProxy | |||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> | |||||
<BreakpointContent | |||||
uuid = "CA18ED35-B323-41F0-AA64-9934CBC4C7E9" | |||||
shouldBeEnabled = "No" | |||||
ignoreCount = "0" | |||||
continueAfterRunningActions = "No" | |||||
filePath = "im-client-ios/dsbridge/Dsbridge.swift" | |||||
startingColumnNumber = "9223372036854775807" | |||||
endingColumnNumber = "9223372036854775807" | |||||
startingLineNumber = "15" | |||||
endingLineNumber = "15" | |||||
landmarkName = "testSyn(_:)" | |||||
landmarkType = "7"> | |||||
</BreakpointContent> | |||||
</BreakpointProxy> | |||||
<BreakpointProxy | |||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> | |||||
<BreakpointContent | |||||
uuid = "7989DB1D-525D-4C81-9C1A-0E3FD9517BD9" | |||||
shouldBeEnabled = "No" | |||||
ignoreCount = "0" | |||||
continueAfterRunningActions = "No" | |||||
filePath = "im-client-ios/webview/WebViewUI.swift" | |||||
startingColumnNumber = "9223372036854775807" | |||||
endingColumnNumber = "9223372036854775807" | |||||
startingLineNumber = "41" | |||||
endingLineNumber = "41" | |||||
landmarkName = "userContentController(_:didReceive:)" | |||||
landmarkType = "7"> | |||||
</BreakpointContent> | |||||
</BreakpointProxy> | |||||
<BreakpointProxy | |||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> | |||||
<BreakpointContent | |||||
uuid = "D8AEE067-F97A-4883-BB4C-F115B50D117E" | |||||
shouldBeEnabled = "No" | |||||
ignoreCount = "0" | |||||
continueAfterRunningActions = "No" | |||||
filePath = "im-client-ios/webview/WebViewUI.swift" | |||||
startingColumnNumber = "9223372036854775807" | |||||
endingColumnNumber = "9223372036854775807" | |||||
startingLineNumber = "38" | |||||
endingLineNumber = "38" | |||||
landmarkName = "userContentController(_:didReceive:)" | |||||
landmarkType = "7"> | |||||
</BreakpointContent> | |||||
</BreakpointProxy> | |||||
<BreakpointProxy | |||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> | |||||
<BreakpointContent | |||||
uuid = "2BE0128F-39C8-4BC9-A9B8-D7E512E77602" | |||||
shouldBeEnabled = "No" | |||||
ignoreCount = "0" | |||||
continueAfterRunningActions = "No" | |||||
filePath = "im-client-ios/webview/WebViewUI.swift" | |||||
startingColumnNumber = "9223372036854775807" | |||||
endingColumnNumber = "9223372036854775807" | |||||
startingLineNumber = "137" | |||||
endingLineNumber = "137" | |||||
landmarkName = "imagePickerController(_:didFinishPickingMediaWithInfo:)" | |||||
landmarkType = "7"> | |||||
</BreakpointContent> | |||||
</BreakpointProxy> | |||||
<BreakpointProxy | |||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> | |||||
<BreakpointContent | |||||
uuid = "B1BBE36C-CFCE-45E4-B14A-F9B07A4C4013" | |||||
shouldBeEnabled = "No" | |||||
ignoreCount = "0" | |||||
continueAfterRunningActions = "No" | |||||
filePath = "im-client-ios/webview/WebViewUI.swift" | |||||
startingColumnNumber = "9223372036854775807" | |||||
endingColumnNumber = "9223372036854775807" | |||||
startingLineNumber = "181" | |||||
endingLineNumber = "181" | |||||
landmarkName = "uploadFile(pickedImage:)" | |||||
landmarkType = "7"> | |||||
</BreakpointContent> | |||||
</BreakpointProxy> | |||||
<BreakpointProxy | |||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> | |||||
<BreakpointContent | |||||
uuid = "D29E3808-53AC-467B-A757-2DCC0E4D6186" | |||||
shouldBeEnabled = "No" | |||||
ignoreCount = "0" | |||||
continueAfterRunningActions = "No" | |||||
filePath = "im-client-ios/webview/WebViewUI.swift" | |||||
startingColumnNumber = "9223372036854775807" | |||||
endingColumnNumber = "9223372036854775807" | |||||
startingLineNumber = "159" | |||||
endingLineNumber = "159" | |||||
landmarkName = "toolsChangeToJson(info:)" | |||||
landmarkType = "7"> | |||||
</BreakpointContent> | |||||
</BreakpointProxy> | |||||
<BreakpointProxy | |||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> | |||||
<BreakpointContent | |||||
uuid = "DF10181B-BB0E-46BE-89AA-803D97221195" | |||||
shouldBeEnabled = "No" | |||||
ignoreCount = "0" | |||||
continueAfterRunningActions = "No" | |||||
filePath = "im-client-ios/webview/WebViewUI.swift" | |||||
startingColumnNumber = "9223372036854775807" | |||||
endingColumnNumber = "9223372036854775807" | |||||
startingLineNumber = "269" | |||||
endingLineNumber = "269" | |||||
landmarkName = "application(_:didRegisterForRemoteNotificationsWithDeviceToken:)" | |||||
landmarkType = "7"> | |||||
</BreakpointContent> | |||||
</BreakpointProxy> | |||||
<BreakpointProxy | |||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> | |||||
<BreakpointContent | |||||
uuid = "43FE8478-2C7E-4883-931C-7B218BC12EF7" | |||||
shouldBeEnabled = "No" | |||||
ignoreCount = "0" | |||||
continueAfterRunningActions = "No" | |||||
filePath = "im-client-ios/webview/WebViewUI.swift" | |||||
startingColumnNumber = "9223372036854775807" | |||||
endingColumnNumber = "9223372036854775807" | |||||
startingLineNumber = "253" | |||||
endingLineNumber = "253" | |||||
landmarkName = "application(_:didFinishLaunchingWithOptions:)" | |||||
landmarkType = "7"> | |||||
</BreakpointContent> | |||||
</BreakpointProxy> | |||||
</Breakpoints> | |||||
</Bucket> |
@@ -0,0 +1,32 @@ | |||||
<?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>SchemeUserState</key> | |||||
<dict> | |||||
<key>im-client-ios.xcscheme_^#shared#^_</key> | |||||
<dict> | |||||
<key>orderHint</key> | |||||
<integer>0</integer> | |||||
</dict> | |||||
</dict> | |||||
<key>SuppressBuildableAutocreation</key> | |||||
<dict> | |||||
<key>8427CB6F2779C57800FFEAF8</key> | |||||
<dict> | |||||
<key>primary</key> | |||||
<true/> | |||||
</dict> | |||||
<key>8427CB7F2779C57B00FFEAF8</key> | |||||
<dict> | |||||
<key>primary</key> | |||||
<true/> | |||||
</dict> | |||||
<key>8427CB892779C57B00FFEAF8</key> | |||||
<dict> | |||||
<key>primary</key> | |||||
<true/> | |||||
</dict> | |||||
</dict> | |||||
</dict> | |||||
</plist> |