小编Seb*_*ien的帖子

SecItemCopyMatching返回nil值而没有任何错误

我正在尝试使用CryptoExercise的SecKeyWrapper addPeerPublicKey:keyBits:方法将一个RSA公钥添加到我的iPhone的钥匙串中.这种方法的逻辑是它首先尝试将密钥添加到钥匙串,如果它已经存在,(sanityCheck==errSecDuplicateItem)它会尝试通过调用从钥匙串中检索此密钥SecKeyItemCopyMatching().

这正是在我的情况下发生的事情:密钥已经在钥匙串中,所以调用SecKeyItemAdd() returns errSecDuplicateItem.

然后它尝试检索现有的键,但SecKeyItemCopyMatching() returns 0(表示没有错误),但第二个参数(peerKeyRef)仍然是零.

这怎么可能?这有什么问题?

以下是[SecKeyWrapper addPeerPublicKey:keyBits:]来自CryptoExercise示例的代码供参考:

- (SecKeyRef)addPeerPublicKey:(NSString *)peerName keyBits:(NSData *)publicKey {
    OSStatus sanityCheck = noErr;
    SecKeyRef peerKeyRef = NULL;
    CFTypeRef persistPeer = NULL;

    LOGGING_FACILITY( peerName != nil, @"Peer name parameter is nil." );
    LOGGING_FACILITY( publicKey != nil, @"Public key parameter is nil." );

    NSData *peerTag = [[NSData alloc] initWithBytes:(const void *) [peerName UTF8String] length:[peerName length]];
    NSMutableDictionary *peerPublicKeyAttr = [[NSMutableDictionary alloc] init]; …
Run Code Online (Sandbox Code Playgroud)

security objective-c ios

6
推荐指数
1
解决办法
2786
查看次数

ClassNotFoundException:org.hibernate.event.spi.PreLoadEventListener

当我尝试运行我的Grails 2.4.1应用程序时,我得到以下异常,我不太明白.

| Running Grails application
objc[15346]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined.
| Error 2014-06-19 16:54:40,048 [localhost-startStop-1] ERROR context.GrailsContextLoaderListener  - Error initializing the application: org/hibernate/event/spi/PreLoadEventListener
Message: org/hibernate/event/spi/PreLoadEventListener
    Line | Method
->>  800 | defineClass               in java.lang.ClassLoader
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - …
Run Code Online (Sandbox Code Playgroud)

grails

6
推荐指数
1
解决办法
2141
查看次数

在kSoap2中使用TLS1.2客户端证书

我正在尝试使用kSoap2和EasyWSDL将我的Android应用程序连接到受TLS保护的SOAP端点,但我收到以下异常:

W/System.err: javax.net.ssl.SSLHandshakeException: Connection closed by peer
                  at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
                  at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:351)
                  at com.android.okhttp.internal.io.RealConnection.connectTls(RealConnection.java:192)
                  at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:149)
W/System.err:     at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:112)
                  at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184)
                  at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
                  at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
W/System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
                  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
                  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
                  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
                  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:258)
                  at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
                  at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(Unknown Source:0)
                  at org.ksoap2.transport.HttpsServiceConnectionSE.openOutputStream(HttpsServiceConnectionSE.java:127)
                  at com.easywsdl.exksoap2.mtom.MTOMTransportImplementation.sendData(MTOMTransportImplementation.java:65)
                  at com.easywsdl.exksoap2.transport.AdvancedHttpsTransportSE.sendData(AdvancedHttpsTransportSE.java:39)
                  at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:184)
                  at com.easywsdl.exksoap2.transport.AdvancedHttpsTransportSE.call(AdvancedHttpsTransportSE.java:51)
Run Code Online (Sandbox Code Playgroud)

以下是我配置传输的方式:

@Override
    protected Transport createTransport() {
        Transport transport = super.createTransport();
        try {
            if(transport instanceof HttpsTransportSE) {
                HttpsTransportSE httpsTransport = (HttpsTransportSE)transport;
                if(httpsTransport.getServiceConnection() instanceof HttpsServiceConnectionSE) {
                    HttpsServiceConnectionSE httpsServiceConnection = (HttpsServiceConnectionSE)httpsTransport.getServiceConnection();
                    httpsServiceConnection.setSSLSocketFactory(getSSLSocketFactory()); …
Run Code Online (Sandbox Code Playgroud)

android soap android-ksoap2 tls1.2

6
推荐指数
1
解决办法
391
查看次数

kSOAP2对双ID异常有点过于严格?

kSOAP2拒绝解析我得到的SOAP响应,因为它包含2个具有相同id值的元素.问题是在XML Schema中,这个id是anyURI类型,而不是xs:ID,所以它没有任何unicity语义:https: //github.com/oehf/ipf/blob/8a22c51a47fab1af6fea7da81f9e5d8de636e225/commons/ihe /xds/src/main/resources/wsdl/schema/ebRS30/rim.xsd#L103

这是kSOAP2中的错误还是有办法禁用该异常?

xml android soap ksoap2

6
推荐指数
1
解决办法
74
查看次数

Jetpack 导航组件在加载具有可为空参数的起始目标时抛出 IllegalStateException

我向开始目的地添加了一个可为空的参数:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/nav_graph"
        app:startDestination="@id/startDest">

    <fragment android:id="@+id/startDest"
          android:name="com.myapp.MyStartFragment"
          android:label="Start"
          tools:layout="@layout/fragment_start">
        <argument
            android:name="dataObject"
            app:argType="com.myapp.MyDataObject"
            android:defaultValue="@null"
            app:nullable="true"/>
        ...
    </fragment>
    ...
</navigation>
Run Code Online (Sandbox Code Playgroud)

但是当我加载我的应用程序时,我收到以下异常:

java.lang.IllegalStateException: Fragment MyStartFragment{a4ffd1f (ca52d4dc-ff36-4a93-8ebf-f11af7b7d5aa) id=0x7f080145} has null arguments
    at com.myapp.MyStartFragment$$special$$inlined$navArgs$1.invoke(FragmentNavArgsLazy.kt:42)
    at com.myapp.MyStartFragment$$special$$inlined$navArgs$1.invoke(Unknown Source:0)
    at androidx.navigation.NavArgsLazy.getValue(NavArgsLazy.kt:44)
    at androidx.navigation.NavArgsLazy.getValue(NavArgsLazy.kt:34)
    at com.myapp.MyStartFragment.getArgs(Unknown Source:27)
    at com.myapp.MyStartFragment.onAttach(MyStartFragment.kt:85)
Run Code Online (Sandbox Code Playgroud)

而异常是由 MyStartFragment 中的这段代码触发的:

private val args: MyStartFragmentArgs by navArgs()
override fun onAttach(context: Context) {
    super.onAttach(context)
    val title = if(this.args.dataObject == null) getString(R.string.start_list_title) else this.args.dataObject!!.name
    ...
}
Run Code Online (Sandbox Code Playgroud)

这是 MyDataObject 的代码:

@Parcelize
data class MyDataObject ( …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack android-jetpack-navigation

6
推荐指数
1
解决办法
3594
查看次数

未安装应用程序时,Firebase 动态链接会导致“找不到动态链接”

我在使用 DynamicLink 时遇到问题。如果在 iPhone 上安装了应用程序,动态链接会打开带有深层链接的 iOS 应用程序,一切正常。但如果该应用程序未安装,则不会在 Apple App Store 中显示该应用程序的页面,而是显示一个显示“未找到动态链接”的网页。

这是调试链接:https : //www.nomadflare.com/app/?ibi=com%2Enomadflare%2ENomadFlare&imv=1%2E0&ofl=https%3A%2F%2Fwww%2Enomadflare%2Ecom& link =https%3A%2F%2Fnomadflare %2Ecom%2Fapp%2F%3Finvitedby%3DdZ3I3pK0KzcOGhO8AoVbBnn8XsO2&d=1

这是我配置整个事情的方式。在我的 Firebase 项目设置中,我设置了 App Store ID 和团队 ID:

Firebase 控制台中的项目设置

在我的动态链接设置中,我使用自定义域和子路径定义了一个新的 URL 前缀(我在域的根目录下有一个网站,托管在 Firebase 托管上):

动态链接设置

有了这个,我在https://nomadflare.com/apple-app-site-association上有以下内容:

{"applinks":{"apps":[],"details":[{"appID":"HLAKBN9F84.com.nomadflare.NomadFlare","paths":["NOT /_/*","/*"]}]}}
Run Code Online (Sandbox Code Playgroud)

然后在我的 XCode 项目中,我在 Capabilities 中启用了关联域,并将第一个关联域设置为applinks:$(DYNAMIC_LINKS_DOMAIN),其中 DYNAMIC_LINKS_DOMAIN 是用户定义的构建设置,它取决于构建配置,但对于 prod 等于nomadflare.com.

在 Info/URL Types 中,自定义 URL 方案是$(PRODUCT_BUNDLE_IDENTIFIER)(同样,取决于构建配置,但对于 prod,它是com.nomadflare.NomadFlare.

最后,在我的 Swift 代码中,我有以下功能,当用户点击“共享”按钮时会触发该功能:

{"applinks":{"apps":[],"details":[{"appID":"HLAKBN9F84.com.nomadflare.NomadFlare","paths":["NOT /_/*","/*"]}]}}
Run Code Online (Sandbox Code Playgroud)

这是我的 Info.plist 中的相关键:

<key>FirebaseDynamicLinksCustomDomains</key>
<array>
    <string>https://$(DYNAMIC_LINKS_DOMAIN)/app</string>
</array>
<key>LSApplicationQueriesSchemes</key>
<key>WebsiteUrl</key>
<string>$(WEBSITE_URL)</string>
<key>AppStoreID</key>
<string>1474350816</string>
Run Code Online (Sandbox Code Playgroud)

并且WEBSITE_URL是另一个特定于构建配置的用户定义设置,其值 …

ios firebase firebase-dynamic-links

6
推荐指数
1
解决办法
9009
查看次数

UISearchController不会按预期显示

我正在尝试将UISearchController添加到包含UITableView(以及MKMapView的UIViewController)中,但希望这不是问题。我遵循了Ray Wenderlich的教程,但是就行为而言,我无法获得相同的结果。

这是我的viewDidLoad:

override func viewDidLoad() {
        super.viewDidLoad()

        // Setup the Search Controller
        searchController.searchResultsUpdater = self
        searchController.obscuresBackgroundDuringPresentation = false
        searchController.searchBar.placeholder = NSLocalizedString("Search references by project, customer or city", comment: "")
        if #available(iOS 11.0, *) {
            navigationItem.searchController = searchController
            navigationItem.hidesSearchBarWhenScrolling = true
        } else {
            tableView.tableHeaderView = searchController.searchBar
        }
        definesPresentationContext = true

        self.modeSelector.layer.cornerRadius = 5.0

        if let split = splitViewController {
            let controllers = split.viewControllers
            detailViewController = (controllers[controllers.count - 1] as! UINavigationController).topViewController as? ReferenceViewController
        }

        self.navigationItem.rightBarButtonItem?.isEnabled = false
    } …
Run Code Online (Sandbox Code Playgroud)

uitableview ios swift uisearchcontroller

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

Firebase功能:未处理的错误RangeError:超出最大调用堆栈大小

我有以下可调用函数,该函数从数据库中获取一些数据,然后使用html-pdf使用该数据创建PDF,将该PDF上载到存储,最后返回存储中文件的名称。它在https形式下工作良好,但我想将其转换为可调用的函数,由于某种原因我无法弄清楚,它因以下错误而崩溃:RangeError:超出了最大调用堆栈大小。

我怀疑这与以下事实有关:html-pdf不适用于promises,而是使用错误/数据回调。但是我试图将其转化为没有成功的承诺。

export const createPdf = functions.https.onCall((data, context) => {
    const refId = data.refId;
    const companyId = data.companyId;
    const userId = context.auth.uid;

    return admin.database().ref('/references').child(companyId).child(refId).once('value', (snapshot) => {
        const filePath = '/references/' + refId + '/pdfs/' + refId + '.pdf';
        const localeId = snapshot.child('locale').val();

        return admin.database().ref('/tags').child(localeId).once('value', (tagsSnapshot) => {
            const jsLocaleId = localeId.replace(/_/, "-");
            const projectDate = moment().locale(jsLocaleId)
                .year(snapshot.child('year').val())
                .month(snapshot.child('month').val() - 1)
                .date(15)
                .format('MMMM YYYY');

            const tags = tagsSnapshot.val();
            const projectCategories = ...
            const pictures = snapshot.child('pictures').val();

            const pdfData = { …
Run Code Online (Sandbox Code Playgroud)

firebase typescript google-cloud-functions

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

Typescript:更新Firebase函数依赖项时出现编译错误

我尝试更新Firebase函数项目的依赖项,以使用最新版本的firebase-functions和firebase-admin,这反过来又似乎需要更新版本的TypeScript和tslint。这是我生成的package.json:

{
  "name": "functions",
  "scripts": {
    "lint": "./node_modules/.bin/tslint -p tslint.json",
    "build": "./node_modules/.bin/tsc",
    "serve": "npm run build && firebase serve --only functions",
    "shell": "npm run build && firebase experimental:functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "main": "lib/index.js",
  "engines": {
    "node": "8"
  },
  "dependencies": {
    "@types/jsonwebtoken": "^7.2.8",
    "axios": "^0.18.1",
    "body-parser": "^1.18.3",
    "express": "^4.16.3",
    "firebase-admin": "^8.0.0",
    "firebase-functions": "^3.1.0",
    "handlebars": "^4.1.2",
    "html-pdf": "^2.2.0",
    "js-sha256": "^0.9.0",
    "json2csv": "^4.1.2",
    "jsonwebtoken": "^8.3.0",
    "jwks-rsa": "^1.3.0",
    "moment": "^2.24.0",
    "pdfkit": "^0.9.1",
    "uuid": "^3.3.2", …
Run Code Online (Sandbox Code Playgroud)

npm firebase typescript google-cloud-functions

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

如何解码 Alamofire 5 中的错误正文?

我正在尝试将我的项目从 Alamofire 4.9 迁移到 5.3,但我在错误处理方面遇到了困难。我想Decodable尽可能多地使用,但当一切顺利时,我的 API 端点返回一个 JSON 结构,而当出现错误时,我的 API 端点返回一个不同的 JSON 结构,所有端点上的所有错误都相同。Codable我的代码中对应的是ApiError.

我想创建一个自定义响应序列化器,它可以给我一个Result<T, ApiError>而不是默认的Result<T, AFError>. 我发现这篇文章似乎解释了一般过程,但其中的代码无法编译。

我怎样才能创建这样的自定义ResponseSerializer

swift alamofire alamofire5

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