小编Jan*_*Jan的帖子

如何将静态库嵌入到 iOS 框架中?

我正在使用iOS-Universal-Framework XCode模板来创建 MyFramework。它工作正常,当我将 MyFramework 添加到 MyApplication 时,我可以按预期访问 MyFramework 的公共对象。

我的问题是我现在将 MyFramework 与其他静态库链接起来:MailCore本身与来自iOSPorts 的一些库链接。当我编译 MyProject 时,它失败了,因为链接器找不到 MailCore 静态库。

可以将所有 MailCore 库导入 MyApplication 中,但这不是我想要的。如何将这些库嵌入到 MyFramework 中?

编辑:重新表述问题。如果 MyApplication 使用 MyFramework 而 MyFramework 使用 libCrypto.a,我是否必须将 MyApplication 链接到 libCrypto?iOS-Universal-Framework XCode声称 I MyFramework 应该嵌入该库,而 MyApplication 确实只需要链接到 MyFramework 但它对我不起作用。

谢谢

frameworks objective-c

5
推荐指数
1
解决办法
2672
查看次数

在 Swift 中合并可编码

我有以下 Swift 结构

struct Session: Encodable {
    let sessionId: String
}
struct Person: Encodable {
    let name: String
    let age: Int
}

let person = Person(name: "Jan", age: 36)
let session = Session(sessionId: "xyz")
Run Code Online (Sandbox Code Playgroud)

我需要编码为具有以下格式的 json 对象:

{
  "name": "Jan",
  "age": 36,
  "sessionId": "xyz"
}
Run Code Online (Sandbox Code Playgroud)

的所有键Session都合并到Person

我想过使用带有自定义Encodable实现的容器结构,我使用 aSingleValueEncodingContainer但它显然只能编码一个值

struct RequestModel: Encodable {
    let session: Session
    let person: Person

    public func encode(to encoder: Encoder) throws {
        var container = encoder.singleValueContainer()
        try container.encode(person)
        // crash …
Run Code Online (Sandbox Code Playgroud)

swift codable

5
推荐指数
2
解决办法
1091
查看次数

带有多个 ViewBuilder 的 SwiftUI 视图

我有一个视图,表示单元格中的一行,如下所示

看法

这很有效,但三个水平元素(图像、标题/副标题、图像)被硬编码为它们各自的类型。

我想要一个泛型ThreeItemView,可以接受Views任何类型的3 个,并如图所示排列它们。这将允许我对任何其他视图类型重用相同的容器布局。

我创建了一个需要三个的视图@ViewBuilders

import Foundation
import SwiftUI

struct ThreeItemView<Start: View, Main: View, End: View>: View {

    let start: () -> Start
    let main: () -> Main
    let end: () -> End

    init(@ViewBuilder start: @escaping() -> Start,
        @ViewBuilder main: @escaping() -> Main,
        @ViewBuilder end: @escaping() -> End) {
        self.start = start
        self.main = main
        self.end = end
    }

    var body: some View {
        return HStack {
            start()
            main()
                .frame(minWidth: 0, maxWidth: .infinity, maxHeight: …
Run Code Online (Sandbox Code Playgroud)

swiftui

5
推荐指数
1
解决办法
649
查看次数

使用 UIImage 创建时 SwiftUI 图像不会切换到深色模式

我有一个简单的 SwiftUI 视图,我在Image其中使用UIImage. 问题是,当配色方案更改时,使用 UIImage 创建的图像不会切换到深色或浅色模式。仅当重新加载整个视图时它才能正常工作。如果我直接使用图像名称创建图像,它会按预期工作。

struct ContentView: View {
    var body: some View {
        HStack {
            VStack {
                Image("my-image")
                Text("Image")
            }

            VStack {
                Image(uiImage: UIImage(named: "my-image")!)
                Text("Image+uiImage")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

图像本身位于 xcasset 目录中

在此输入图像描述

结果是这样的(请注意,当外观改变时,右侧图像不会改变,但仅在重新启动应用程序后才改变)

在此输入图像描述

swiftui

5
推荐指数
2
解决办法
2183
查看次数

viewDidLoad中的CGAffineTransformRotate拉伸/分散UIImageView

我需要在加载视图时按接口构建器创建的UIImageView以给定角度旋转.

- (void)viewDidLoad
{
   [super viewDidLoad];
    image.transform = CGAffineTransformRotate(image.transform, REF_INIT_OFFSET*M_PI/180); 
}
Run Code Online (Sandbox Code Playgroud)

这会旋转图像,但后者完全扭曲和拉伸.如果REF_INIT_OFFSET是90的倍数,它可以正常工作!

这是图片的样子(注意指针指向"0")

在此输入图像描述

以下是它的实际外观:

看起来图像被拉伸到错误的方向.

你知道什么是错的吗?

谢谢,

uiimageview ios

4
推荐指数
1
解决办法
3970
查看次数

UITabBar色彩不适用于图像

我有一个UITabBarInterface Buider 的设置,只有当我没有设置全局应用色调时,图像高亮才能正常工作:

标签栏没有色彩

当我使用时设置我的应用程序的全局色调颜色

[[UIView appearance] setTintColor:[TAStyleKit tintColor]];
Run Code Online (Sandbox Code Playgroud)

然后所有选项卡图像显示为已选中.

在此输入图像描述

只有当我单击选项卡并再次返回时,它们才具有正确的颜色.请注意灰色的"武器"标签:

在此输入图像描述

我究竟做错了什么 ?

uitabbar uiappearance ios8

4
推荐指数
2
解决办法
4692
查看次数

什么是UIApplicationLaunchOptionsRemoteNotificationKey用于?

如果我理解正确的话,当应用程序未运行时收到推送(例如被杀)时,该UIApplicationLaunchOptionsRemoteNotificationKey键将用于该-[UIApplicationDelegate application:didFinishLaunchingWithOptions:]方法- 用户点击接收到的推送

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
    if(userInfo) {
        // app was not running and the user clicked on the push
    }
}
Run Code Online (Sandbox Code Playgroud)

但是......在完全相同的情况下,-[AppDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:]也会在前一个之后调用.

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler
{
    // called when
    // app was not running and the user clicked on the push
    // app was running in background and user clicked on a push
    // app was running in …
Run Code Online (Sandbox Code Playgroud)

push-notification ios

4
推荐指数
1
解决办法
1199
查看次数

NS_SWIFT_NAME是否保留为Factory方法?

我正在开发一个用Objective-C编写的库,我希望在Swift上桥接时尽可能使它成为"Swifty".

例如,具有此定义的Objective-C方法

-(void)logProductWithId:(NSString *) productId productName:(NSString*) productName;
Run Code Online (Sandbox Code Playgroud)

自动转换为此Swift函数

func logProductWithId(productId: String, productName: String)
Run Code Online (Sandbox Code Playgroud)

使用NS_SWIFT_NAME宏来摆脱"With" 是一个好习惯:

-(void)logProductWithId:(NSString *) productId productName:(NSString*) productName NS_SWIFT_NAME( logProduct(identifier:name:) )
Run Code Online (Sandbox Code Playgroud)

然后迅速翻译成

func logProduct(identifier productId: String, name productName: String)
Run Code Online (Sandbox Code Playgroud)

我看到一些做题提的是,NS_SWIFT_NAME仅适用于工厂方法.在苹果公司的文件仅提到了工厂方法作为例子,但没有明确说,关于限制上NS_SWIFT_NAME

objective-c swift

4
推荐指数
1
解决办法
3127
查看次数

多个操作系统的 Travis 阶段

我正在设置一个.travis.yml我需要的地方 - 在两个平台上构建 - 在所有构建完成后部署

我首先创建了一个matrixfor building

language: cpp
matrix:
  include:
    - os: osx
      osx_image: xcode10.1
      script:
      - "./Travis/build-osx.sh"

    - os: linux
      dist: trusty
      script:
        - "./Travis/build-linux.sh"
Run Code Online (Sandbox Code Playgroud)

这可以正确运行两个构建并行。问题是如何添加一个stage将在两个构建完成后运行的。

作业文档使用阶段,但当我使用阶段时它似乎不起作用matrix

travis-ci

4
推荐指数
1
解决办法
653
查看次数

WKWebView 不尊重宽度=设备宽度

我正在将一个简单的 html 字符串加载到 a 中WKWebView,我的目标是在该 web 视图中显示全屏图像。

问题是图像似乎按预期缩放了两倍。

我只是加载WKWebView使用

NSString *html = @"..."  // the content
[self.webView loadHTMLString:html baseURL:[[NSBundle mainBundle] bundleURL]];
Run Code Online (Sandbox Code Playgroud)

我希望图像全屏并适合屏幕

在此处输入图片说明

但是我得到的图像似乎是屏幕分辨率的两倍(不是左下角的文本(

在此处输入图片说明

我尝试使用initial-scale和玩maximum-scale

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

也不是这似乎只发生在 HTML 中以 base64 编码的图像上,但这是我需要的。

HTML是

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8"/>
    <meta name="viewport" content="width=device-width"/>
</head>

<img src="data:image/png;base64, ...">
<!-- <img src="http://placehold.it/750x1334"> -->
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是 html 完整的 HTML

ios wkwebview

3
推荐指数
1
解决办法
6634
查看次数