fix(log): use Swift OSLog instead of oslog Rust binding (#262)

pull/285/head
Lucas Fernandes Nogueira 2 years ago committed by GitHub
parent 22f987bf24
commit 961602bd1b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

86
Cargo.lock generated

@ -959,19 +959,6 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "dashmap"
version = "5.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc"
dependencies = [
"cfg-if",
"hashbrown",
"lock_api",
"once_cell",
"parking_lot_core 0.9.7",
]
[[package]] [[package]]
name = "der" name = "der"
version = "0.5.1" version = "0.5.1"
@ -1831,9 +1818,9 @@ dependencies = [
[[package]] [[package]]
name = "http" name = "http"
version = "0.2.8" version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
dependencies = [ dependencies = [
"bytes 1.4.0", "bytes 1.4.0",
"fnv", "fnv",
@ -2707,6 +2694,15 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "num_threads"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
dependencies = [
"libc",
]
[[package]] [[package]]
name = "objc" name = "objc"
version = "0.2.7" version = "0.2.7"
@ -2802,17 +2798,6 @@ dependencies = [
"pin-project-lite", "pin-project-lite",
] ]
[[package]]
name = "oslog"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "80d2043d1f61d77cb2f4b1f7b7b2295f40507f5f8e9d1c8bf10a1ca5f97a3969"
dependencies = [
"cc",
"dashmap",
"log",
]
[[package]] [[package]]
name = "overload" name = "overload"
version = "0.1.1" version = "0.1.1"
@ -3108,7 +3093,7 @@ dependencies = [
"line-wrap", "line-wrap",
"quick-xml", "quick-xml",
"serde", "serde",
"time 0.3.18", "time 0.3.15",
] ]
[[package]] [[package]]
@ -4273,7 +4258,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri" name = "tauri"
version = "2.0.0-alpha.3" version = "2.0.0-alpha.3"
source = "git+https://github.com/tauri-apps/tauri?branch=next#6aaba83476339fa413fe34d28877a932cb485117" source = "git+https://github.com/tauri-apps/tauri?branch=next#105fe3fa242df87ad7655b519b0c01c3da9d8ee4"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"attohttpc", "attohttpc",
@ -4323,7 +4308,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-build" name = "tauri-build"
version = "2.0.0-alpha.1" version = "2.0.0-alpha.1"
source = "git+https://github.com/tauri-apps/tauri?branch=next#6aaba83476339fa413fe34d28877a932cb485117" source = "git+https://github.com/tauri-apps/tauri?branch=next#105fe3fa242df87ad7655b519b0c01c3da9d8ee4"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"cargo_toml", "cargo_toml",
@ -4342,7 +4327,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-codegen" name = "tauri-codegen"
version = "2.0.0-alpha.1" version = "2.0.0-alpha.1"
source = "git+https://github.com/tauri-apps/tauri?branch=next#6aaba83476339fa413fe34d28877a932cb485117" source = "git+https://github.com/tauri-apps/tauri?branch=next#105fe3fa242df87ad7655b519b0c01c3da9d8ee4"
dependencies = [ dependencies = [
"base64 0.21.0", "base64 0.21.0",
"brotli", "brotli",
@ -4358,7 +4343,7 @@ dependencies = [
"sha2 0.10.6", "sha2 0.10.6",
"tauri-utils", "tauri-utils",
"thiserror", "thiserror",
"time 0.3.18", "time 0.3.15",
"url", "url",
"uuid", "uuid",
"walkdir", "walkdir",
@ -4367,7 +4352,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-macros" name = "tauri-macros"
version = "2.0.0-alpha.1" version = "2.0.0-alpha.1"
source = "git+https://github.com/tauri-apps/tauri?branch=next#6aaba83476339fa413fe34d28877a932cb485117" source = "git+https://github.com/tauri-apps/tauri?branch=next#105fe3fa242df87ad7655b519b0c01c3da9d8ee4"
dependencies = [ dependencies = [
"heck", "heck",
"proc-macro2", "proc-macro2",
@ -4453,12 +4438,13 @@ dependencies = [
"byte-unit", "byte-unit",
"fern", "fern",
"log", "log",
"oslog",
"serde", "serde",
"serde_json", "serde_json",
"serde_repr", "serde_repr",
"swift-rs",
"tauri", "tauri",
"time 0.3.18", "tauri-build",
"time 0.3.15",
] ]
[[package]] [[package]]
@ -4587,7 +4573,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-runtime" name = "tauri-runtime"
version = "0.13.0-alpha.1" version = "0.13.0-alpha.1"
source = "git+https://github.com/tauri-apps/tauri?branch=next#6aaba83476339fa413fe34d28877a932cb485117" source = "git+https://github.com/tauri-apps/tauri?branch=next#105fe3fa242df87ad7655b519b0c01c3da9d8ee4"
dependencies = [ dependencies = [
"gtk", "gtk",
"http", "http",
@ -4608,7 +4594,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-runtime-wry" name = "tauri-runtime-wry"
version = "0.13.0-alpha.1" version = "0.13.0-alpha.1"
source = "git+https://github.com/tauri-apps/tauri?branch=next#6aaba83476339fa413fe34d28877a932cb485117" source = "git+https://github.com/tauri-apps/tauri?branch=next#105fe3fa242df87ad7655b519b0c01c3da9d8ee4"
dependencies = [ dependencies = [
"cocoa", "cocoa",
"gtk", "gtk",
@ -4628,7 +4614,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-utils" name = "tauri-utils"
version = "2.0.0-alpha.1" version = "2.0.0-alpha.1"
source = "git+https://github.com/tauri-apps/tauri?branch=next#6aaba83476339fa413fe34d28877a932cb485117" source = "git+https://github.com/tauri-apps/tauri?branch=next#105fe3fa242df87ad7655b519b0c01c3da9d8ee4"
dependencies = [ dependencies = [
"brotli", "brotli",
"ctor", "ctor",
@ -4745,29 +4731,13 @@ dependencies = [
[[package]] [[package]]
name = "time" name = "time"
version = "0.3.18" version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af0097eaf301d576d0b2aead7a59facab6d53cc636340f0291fab8446a2e8613" checksum = "d634a985c4d4238ec39cacaed2e7ae552fbd3c476b552c1deac3021b7d7eaf0c"
dependencies = [ dependencies = [
"itoa 1.0.5", "itoa 1.0.5",
"serde", "libc",
"time-core", "num_threads",
"time-macros",
]
[[package]]
name = "time-core"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
[[package]]
name = "time-macros"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2"
dependencies = [
"time-core",
] ]
[[package]] [[package]]
@ -5698,7 +5668,7 @@ dependencies = [
[[package]] [[package]]
name = "wry" name = "wry"
version = "0.27.0" version = "0.27.0"
source = "git+https://github.com/tauri-apps/wry?branch=dev#9975dda12a122051b375ec6485650546d2d91c26" source = "git+https://github.com/tauri-apps/wry?branch=dev#7795356a45b1bd015fad0e9973fc5af58c8c339b"
dependencies = [ dependencies = [
"base64 0.13.1", "base64 0.13.1",
"block", "block",

@ -9,6 +9,9 @@ rust-version.workspace = true
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[build-dependencies]
tauri-build.workspace = true
[dependencies] [dependencies]
serde.workspace = true serde.workspace = true
serde_json.workspace = true serde_json.workspace = true
@ -23,7 +26,7 @@ fern = "0.6"
android_logger = "0.11" android_logger = "0.11"
[target."cfg(target_os = \"ios\")".dependencies] [target."cfg(target_os = \"ios\")".dependencies]
oslog = "0.2" swift-rs = { git = "https://github.com/Brendonovich/swift-rs", rev = "eb6de914ad57501da5019154d476d45660559999" }
[features] [features]
colored = ["fern/colored"] colored = ["fern/colored"]

@ -1,12 +1,15 @@
fn alias(alias: &str, has_feature: bool) { // Copyright 2019-2023 Tauri Programme within The Commons Conservancy
if has_feature { // SPDX-License-Identifier: Apache-2.0
println!("cargo:rustc-cfg={alias}"); // SPDX-License-Identifier: MIT
}
} use std::process::exit;
fn main() { fn main() {
let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); if let Err(error) = tauri_build::mobile::PluginBuilder::new()
let mobile = target_os == "ios" || target_os == "android"; .ios_path("ios")
alias("desktop", !mobile); .run()
alias("mobile", mobile); {
println!("{error:#}");
exit(1);
}
} }

@ -0,0 +1,11 @@
.DS_Store
/.build
/Packages
/*.xcodeproj
xcuserdata/
DerivedData/
.swiftpm/config/registries.json
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
.netrc
Package.resolved
/tauri-api

@ -0,0 +1,31 @@
// swift-tools-version:5.7
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "tauri-plugin-log",
platforms: [
.iOS(.v11),
],
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "tauri-plugin-log",
type: .static,
targets: ["tauri-plugin-log"]),
],
dependencies: [
.package(name: "Tauri", path: "tauri-api")
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "tauri-plugin-log",
dependencies: [
.byName(name: "Tauri")
],
path: "Sources")
]
)

@ -0,0 +1,3 @@
# Log
Exposes a function log a message using the OSLog API.

@ -0,0 +1,13 @@
import UIKit
import Tauri
import SwiftRs
@_cdecl("tauri_log")
func log(level: Int, message: UnsafePointer<SRString>) {
switch level {
case 1: Logger.debug(message.pointee.to_string())
case 2: Logger.info(message.pointee.to_string())
case 3: Logger.error(message.pointee.to_string())
default: break
}
}

@ -22,6 +22,11 @@ use tauri::{
pub use fern; pub use fern;
#[cfg(target_os = "ios")]
extern "C" {
fn tauri_log(level: u8, message: &swift_rs::SRString);
}
const DEFAULT_MAX_FILE_SIZE: u128 = 40000; const DEFAULT_MAX_FILE_SIZE: u128 = 40000;
const DEFAULT_ROTATION_STRATEGY: RotationStrategy = RotationStrategy::KeepOne; const DEFAULT_ROTATION_STRATEGY: RotationStrategy = RotationStrategy::KeepOne;
const DEFAULT_LOG_TARGETS: [LogTarget; 2] = [LogTarget::Stdout, LogTarget::LogDir]; const DEFAULT_LOG_TARGETS: [LogTarget; 2] = [LogTarget::Stdout, LogTarget::LogDir];
@ -260,29 +265,18 @@ impl Builder {
} }
#[cfg(target_os = "ios")] #[cfg(target_os = "ios")]
LogTarget::Stdout | LogTarget::Stderr => { LogTarget::Stdout | LogTarget::Stderr => {
use std::sync::Mutex;
let loggers: Mutex<HashMap<String, oslog::OsLog>> = Default::default();
let mut subsystem = String::new();
let identifier = &app_handle.config().tauri.bundle.identifier;
let s = identifier.split('.');
let last = s.clone().count() - 1;
for (i, w) in s.enumerate() {
if i != last {
subsystem.push_str(w);
subsystem.push('.');
}
}
subsystem.push_str(&app_handle.package_info().crate_name);
fern::Output::call(move |record| { fern::Output::call(move |record| {
let mut loggers = loggers.lock().unwrap();
let pair =
loggers.entry(record.target().into()).or_insert_with(|| {
oslog::OsLog::new(&subsystem, record.target())
});
let message = format!("{}", record.args()); let message = format!("{}", record.args());
(*pair).with_level(record.level().into(), &message); unsafe {
tauri_log(
match record.level() {
log::Level::Trace | log::Level::Debug => 1,
log::Level::Info => 2,
log::Level::Warn | log::Level::Error => 3,
},
&message.as_str().into(),
);
}
}) })
} }
#[cfg(desktop)] #[cfg(desktop)]

Loading…
Cancel
Save