2016-09-30 2 views
3

Gotta 変わったここに問題があります。 TestFrameworkObjective-CデバイスとシミュレータのアーキテクチャへのSwiftフレームワーク

TestFrameworkフレームワークをObjective-Cアプリケーションに正常にインポートすることができました。ただし、デバイスアーキテクチャまたはシミュレータアーキテクチャのいずれかを構築することしかできません。

どのアーキテクチャにもこの高速フレームワークを使用してObjective-Cアプリケーションを実行できるように設定するにはどうすればよいですか?

今は、アプリケーションからフレームワークを削除し、.frameworkファイルを再構築し(デバイスまたはシミュレータのいずれかを選択して)、このフレームワークをアプリケーションプロジェクトに再デプロイします。どんなプロジェクト(シミュレータまたはデバイス)でもこのフレームワークを使用できるようにしたいので、これを行うのは面倒です。

私はココアパッドを使用することができますが、まだこれを設定していません。

フレームワークでは、「Testing」というクラスがあります(下記の質問を参照)。私は私の客観的なアプリケーションでこのクラスにアクセスすることができます。 「テスト」オブジェクトをインスタンス化し、そのパブリック関数などを呼び出す。コードがコンパイルされます。ただし、フレームワークがコンパイルされていないアーキテクチャ用にビルドしようとすると、エラーが発生する問題があります。 エラー:ここ

ld: warning: ignoring file /Users/kersan/projects/TestApp2/TestApp2/TestFramework.framework/TestFramework, missing required architecture x86_64 in file /Users/kersan/projects/TestApp2/TestApp2/TestFramework.framework/TestFramework (2 slices) 
Undefined symbols for architecture x86_64: 
    "_OBJC_CLASS_$__TtC13TestFramework7Testing", referenced from: 
     objc-class-ref in ViewController.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

は私のconfigsのスクリーンショットといくつかのコードです: enter image description here enter image description here enter image description here enter image description here

TestFramework.h:

#import <UIKit/UIKit.h> 

//! Project version number for TestFramework. 
FOUNDATION_EXPORT double TestFrameworkVersionNumber; 

//! Project version string for TestFramework. 
FOUNDATION_EXPORT const unsigned char TestFrameworkVersionString[]; 

// In this header, you should import all the public headers of your framework using statements like #import <TestFramework/PublicHeader.h> 

Testing.swift:

私のObjective-Cのアプリで
// 
// Testing.swift 
// TestFramework 
// 
// Created by Kaan Ersan on 2016-09-29. 
// Copyright © 2016 Kaan Ersan. All rights reserved. 
// 

import Foundation 


@objc open class Testing : NSObject { 

    open var testDescription : String? 


    open func printDesc() -> String { 
     print("testDescription: \(testDescription)") 
     return "Testing class -> Hello World" 
    } 

} 

のViewControllerを:私は見ての通り

// 
// ViewController.m 
// TestApp2 
// 
// Created by Kaan Ersan on 2016-09-29. 
// Copyright © 2016 Kaan Ersan. All rights reserved. 
// 

#import "ViewController.h" 
#import "TestFramework/TestFramework-Swift.h" 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    Testing *testing = [[Testing alloc] init]; 
    [testing printDesc]; 

    [_label setText:testing.printDesc]; 

    // Do any additional setup after loading the view, typically from a nib. 
} 


- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 


@end 

答えて

0

- あなたは、iOSデバイスのためのフレームワークを構築しますが、クラッシュは、シミュレータ上で実行するプロジェクトをしようとしたときに表示されるようです。シミュレータはデバイスとはアーキテクチャが異なります。あなたのフレームワークにはシミュレータアーキテクチャ(x86_64)のシンボルが含まれていないので、私にとってはクラッシュします。したがって、このアーキテクチャをフレームワークに追加するだけです。これを行う方法はhereで説明されています。

+0

これは正しい方向に私を指摘し、Aggregateターゲットを使用して問題を解決しました。私はまだフレームワークをappstoreに提出していない、またはこのフレームワークを持つappをappstoreにまだ提出していない。うまくいけば、それらの答えにも説明されているようにうまくいくでしょう。ありがとう! – c0d3Junk13

関連する問題