質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.09%

ラズパイでSwiftを使いたい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,288

score 19

この無謀な行為の動機について

僕はプログラム初心者です。

javaとかpython、swiftなど必要に応じて浅く触ってきました。
swiftはずば抜けて好きです。だからラズパイにおいてもswiftを使いたいです。

また、私は”スマートHome”を作るりたいと思っています。なのでラズパイを
使いたいです。

現状

ラズパイへのswiftの導入はこのサイトに書いてある通りに行いました。
初めは「これで完璧!!」と思っていました。

しかし!!

以下のようなエラーが出てきてしまい思っていたものとは違う結果となってしまいました。
それでも、簡単なプログラム程度ならバイナリー化も実行もできました。
ラズパイ

困ったこと

「ラスパイでできないのはしょうがないmacでやってみよう」とやってみました。
テキストエディタで書いて「〜.swift」と名前をつけて
ターミナルでコンパイルしようとしました。

でも、できませんでした。

恥ずかしながら、僕はラズパイで行う以前にMac上(Macのターミナル)でさえ
swiftのプログラムを作り実行できないようです。

試してみたのは以下のプログラムを少し直したものです。

import UIKit
import PlaygroundSupport

let addr = "192.168.0.123"
let port = 4567  //PORT Num

var buffer = [UInt8](repeating: 0, count: 255)

var inp : InputStream?
var out : OutputStream?
Stream.getStreamsToHost(withName: addr, port: port, inputStream: &inp, outputStream: &out)

if inp != nil && out != nil {
    let inputStream : InputStream = inp!
    let outputStream : OutputStream = out!
    inputStream.open()
    outputStream.open()

    if outputStream.streamError == nil && inputStream.streamError == nil {
        let queryString = "クライアントから送信したいデータ"
        let queryData = [UInt8](queryString.utf8) 
        while true {
            UnsafePointer<UInt8>(queryData)
            outputStream.write(queryData, maxLength: queryData.count)
            var readChars: Int = inputStream.read(&buffer, maxLength: buffer.count)
            if (readChars > 0) {
                let readString: String = NSString(data: NSData(bytes:buffer, length:readChars) as Data, encoding: String.Encoding.utf8.rawValue)! as String
                print(readString) //  サーバから受信したデータ
                usleep(300 * 1000) //300ms待つ(適当
                }

            } else {
                print ("server closed connection")
                inputStream.close()
                outputStream.close()
                break
            }
        }
    } else {
        print ("could not create socket")
    }
} else {
    print ("could not initialize stream")
}


以下のようなエラーが返ってきました。
Macのターミナル
パッケージがなんとからしいですね...
調べてみましたが分かりません。悔しいです!

あと...

Mac持ちというのにLinixの詳しい知識はほとんどありません。
(これでは、エセMac使いですね(;_;))

聞きたいこと

  1. Macにて、Xcodeを使うことなく任意のエディタ・場所で書いた
    UIKit,Foundationを使ったswiftのコードをコンパイし、実行できるようになりたい。
  2. 0で行ったことをラズパイでも行いたい。

以上2つです。

誰か教えてください。

お願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • fuzzball

    2019/03/13 09:14

    UIKitは使えないんじゃないかな。

    キャンセル

  • t_obara

    2019/03/13 10:21

    https://developer.apple.com/documentation/uikit
    まずはドキュメントからご確認ください。一番最初に記述されています。

    キャンセル

回答 2

checkベストアンサー

+2

参考にしているプログラムは、iPad用のPlaygroundで動作するプログラムです。

import UIKit
import PlaygroundSupport


の部分ですが、
UIKitは、iPhoneやiPadで動作するiOS専用のフレームワークですので、ラズパイでは使えないのはもちろん、macOSでも使えません。
PlaygroundSupportは、Playground環境をサポートするためのモジュールですので、Playground環境以外では使えません。

ただ、参考にしているプログラムでやろうとしているのは、Foundationで提供されているInputStream、OutputStreamを使ってsocket通信をしようとしているだけのようですので、上記のimportの代わりに

import Foundation


とするだけでmacOSでもビルドできるかもしれません。

ラズパイでFoundationが使えるかですが、
https://qiita.com/dankogai/items/d8cd9df0bdf820dcef1d
によると、swift4.2になってからLinux用swiftもFoundationが
使えるようになったようですから、今ラズパイで使っているSwiftのバージョンが
4.2なら、同じように import Foundationにしたらビルドできるかもしれません。

ラズパイ自体使ったことないので、それ以上のことは私にはわかりません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/14 08:34

    言われてみれば、当たり前ですね。
    くだらない質問に答えてくださりありがとうございます。

    import Foundationに変更してMacにてコンパイルしましたが、

    <module-includes>:1:9: note: in file included from <module-includes>:1:
    #import "Headers/CoreFoundation.h"
    ^
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h:43:10: note: in file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h:43:
    #include <CoreFoundation/CFBase.h>
    ^
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:72:10: note: in file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:72:
    #include <Block.h>

    このようなエラーが無数に出てきてしまいました。
    これはなんでしょうか

    キャンセル

  • 2019/03/14 11:52

    それはヘッダのinclude状況を示しているヒントメッセージです。エラーになっているなら「error: no such module 'UIKit'」といったように「error:」と書かれているところにエラーメッセージが出ているはずです。
    新しくやったことを追記する時は、質問欄を編集して追記してください。

    キャンセル

+1

エラーメッセージを読んで、その意味を理解しましょう
まずはそれからのはなしです

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/13 09:11 編集

    そうですか。頑張ってみます
    エラーについてもっと調べれば、必ず解決できますか?

    僕も結構調べたのですが、分かりません。
    何かキーワードをもらえませんか?

    キャンセル

  • 2019/03/15 16:14

    y_waiwaiさんからは、具体的なアドバイスはもらえません。
    何かにつけググって下さい、まずは理解して下さいと言われる方なので、あきらめて下さい。
    質問者様のワラをもつかむ努力も知らずに。。
    ネガティブなコメントですみません。

    キャンセル

  • 2019/03/16 07:15

    とんでもありません、
    僕の努力が足りないんですね。
    頑張ります。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.09%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る