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